problem z obliczeniami w tablicy

1

Witam, dopiero zaczynam programować w C++ i mam pewien problem z programem, w którym wygenerowałam 10-elementową tablicę losowych elementów.
Muszę obliczyć średnią arytmetyczną, średnią geometryczną i medianę tych elementów. Z tablicą jest wszystko ok, problem tkwi w obliczeniach.
Mój kod:

#include <iostream>
#include <cstdlib>
#include <ctime>
#include <math.h>

using namespace std;

int main()
{
    int tab[10], suma;
    float srednia_a;
    srand(time(0));
    for(int i=0;i<10;i++)       //generowanie tablicy

        {
        tab[i]=rand()%100;
        cout<< tab[i]<<endl;        //wypisywanie tablicy
        }

    for(int i=0; i<10; i++)
        {
        suma += tab[i];
        }
    srednia_a=suma/10;
    cout << "\n\nSrednia arytmetyczna tych cyfr wynosi: "<<srednia_a<<endl;

    double iloczyn;
    for (int i=0; i<10; i++)
        {
        iloczyn *= tab[i];
        }
    sqrt(iloczyn) == pow(iloczyn, 1/10.0);

    cout<<"Srednia geometryczna tych cyfr wynosi: "<<sqrt(iloczyn)<<endl;



    return 0;
}

W momencie kiedy dodałam średnią geometryczną, średnia arytmetyczna też zaczęła być źle obliczana.
Może ktoś pomóc??

Byłabym wdzięczna też za jakąś wskazówkę co do znalezienia mediany tych elementów.

1
    double iloczyn;
    for (int i=0; i<10; i++)
        {
        iloczyn *= tab[i];
        }

Nie inicjujesz ani zmiennej iloczyn, ani zmiennej suma.

1
 srednia_a=suma/10;

jak chcesz wynik w postaci zmiennoprzecinkowej musisz dzielić przez taką liczbę czyli 10.0;

I jak będzie inicjował zmienną iloczyn musisz jej przypisać 1 bo mnożenie przez zero nic nie da ;)

Staraj się unikać przyjmowania wartości domyślnych dodatkowe "= 0" nie zaszkodzi ;)

2
  1. Brak inicjalizacji zmiennych iloczyn, suma, srednia_a.
  2. srednia_a=suma/10 – tu masz dzielenie całkowite.
  3. sqrt(iloczyn) == pow(iloczyn, 1/10.0) – to kompletnie nie ma sensu: to co tutaj robisz to porównujesz, czy pierwiastek kwadratowy z iloczyn jest równy pierwiastkowi 10. stopnia z iloczyn, przy czym wynik porównania ignorujesz.
  4. Żeby obliczyć medianę musisz posortować tablicę a następnie wziąć element środkowy – a w twoim przypadku, gdy elementów w tablicy jest parzysta liczba: średnią arytmetyczną dwóch środkowych elementów.
  5. Rada: podziel to sobie na funkcje. Stwórz funkcję srednia_arytm, srednia_geom, mediana, To o wiele uprości późniejszą analizę programu.
1
rincewind napisał(a):

sqrt(iloczyn) == pow(iloczyn, 1/10.0) – to kompletnie nie ma sensu: to co tutaj robisz to porównujesz, czy pierwiastek kwadratowy z iloczyn jest równy pierwiastkowi 10. stopnia z iloczyn, przy czym wynik porównania ignorujesz.

Ja znalazlam cos takiego przegladajac rozne fora... Zmienilam to na

 double iloczyn=1, srednia_g;
    for (int i=0; i<10; i++)
        {
        iloczyn *= tab[i];    
        }
    srednia_g == sqrt(pow(iloczyn, 1/10.0));

    cout<<"Srednia geometryczna tych cyfr wynosi: "<<srednia_g<<endl;

ale dalej nie dziala

1

Tak jak @rincewind pisał, wynik porównania ignorujesz. Przyrównujesz srednia_g do pierwiastka, ale nic nie robisz z wynikiem! Nie ważne czy wyjdzie true czy false, i tak nigdzie nie korzystasz z tej wartości. Wynik takiego porównania trzeba sobie zapisać w zmiennej albo samo porównanie wstawić do jakiejś instrukcji sterującej - if, for, while itp.

1

Udalo sie!! po prostu z

srednia_g = pow(iloczyn, 1/10.0)

dzieki za pomoc :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1