Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Iloczyn wartości w tablicy - funkcja

Ostatnio zmodyfikowano 2016-12-05 19:07
Autor Wiadomość
wokub
Temat założony przez niniejszego użytkownika
Iloczyn wartości w tablicy - funkcja
» 2016-12-05 16:44:34
Witam.
Mam problem z jedną funkcją. Zadanie miało kilka podpunktów, jednak to funkcja zwracająca iloczyn z wartości liczb w tablicy stanowi dla mnie największy problem.
Polecenie to ... Zaimplementuj funkcję przyjmującą tablicę typu int, jej rozmiar jako zmienną int i zwracającą jedną liczbę będącąiloczynem elementów tablicy (można użyć sposobu z sizeof() do wyznaczenia ilości elementów zamiast argumentu). Póki co mam:

C/C++
#include <iostream>
#include <stdio.h>
#include <windows.h>

using namespace std;


int obliczIloczynTablicy( int tablica[ 6 ], int n )
{
    return
}

int main()
{
    int tablica[ 6 ] = { 1, 2, 3, 4, 5, 6 };
    int n = sizeof( tablica ) / sizeof( int );
    int iloczynTablicy;
   
   
   
    iloczynTablicy = obliczIloczynTablicy();
   
    cout << "Iloczyn tablicy jest rowny " << iloczynTablicy << endl;
   
    system( "pause" );
    cin.get();
    return 0;
}

 I właśnie problemem jest return ... tutaj nie wiem co wpisać oraz obliczIloczynTablicy() <- co mam dopisać w nawiasie. O ile inne funkcje poszły mi jak z płatka, o tyle ta jest póki co nie do przejścia.
Byłbym bardzo wdzięczny, gdyby ktoś mi mógł pomóc lub po prostu podpowiedzieć.
P-154540
Gibas11
» 2016-12-05 16:56:08
std::accumulate, std::multiplies
Opis w komentarzach, jak twoje IDE wymaga doklejenia system("pause") i std::cin.get() na końcu to programuj w czymś innym.

C/C++
#include <functional>
#include <iostream>
#include <numeric>

int obliczIloczynTablicy( int tablica[], int n )
{
    /* Kolejno argumenty:
    * - początek tablicy
    * - koniec tablicy
    * - początkowa wartość
    * - funkcja do przeprowadzenia operacji */
    return std::accumulate( tablica, tablica + n, 1, std::multiplies < int >() );
}

int main()
{
    int tablica[] = { 1, 2, 3, 4, 5, 6 };
    size_t n = sizeof( tablica ) / sizeof( int );
   
    std::cout << "Iloczyn tablicy jest rowny " << obliczIloczynTablicy( tablica, n ) << std::endl;
    return 0;
}

//edit:
Przy okazji inne drobnostki, które poprawiłem:
- Nie używaj
using namespace std;
 – robi ci śmietnik w globalnej przestrzeni nazw.
- Można pominąć rozmiar tablicy przy definiowaniu jej (kompilator się domyśli) i deklarując jako parametr funkcji (i tak jest tam zmieniana w zwykły wskaźnik).
- Zmienna
iloczynTablicy
 była zbędna.
P-154541
wokub
Temat założony przez niniejszego użytkownika
» 2016-12-05 17:53:59
Dzięki wielkie za podpowiedź. Teraz wiem w którym kierunku iść. Co prawda, jest to ciut wykraczające poza wiedzę, którą zdobyłem do tej pory, no ale jakoś idzie.

Co do tego przykładu. Mam jeden problem. CodeBlocks daje błąd. ,, 'accumulate' is not a member of 'std' "
P-154547
Monika90
» 2016-12-05 18:27:47
std::accumulate i std::multiplies wymagają
C/C++
#include <numeric>
#include <functional>
P-154549
wokub
Temat założony przez niniejszego użytkownika
» 2016-12-05 18:34:13
Dzięki wielkie. Domyślałem się, że problem leży w elementach include (bibliotekach?), jednak znam ich tak mało, że nigdy bym się nie domyślił konkretnej.
P-154550
Gibas11
» 2016-12-05 18:35:27
@Monika90: Racja, dziwnie mi się zaznaczyło kod albo kompilator zapewnił mi jakieś niestandardowe ficzery. Poprawione.
P-154551
Elaine
» 2016-12-05 19:07:32
std::multiplies < int >()
Wystarczy std::multiplies<>().
P-154554
« 1 »
  Strona 1 z 1