problem z obliczeniami w tablicy

2012-10-23 03:08
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.

jeszcze raz utwórz wątek ze statusem ogłoszenie, a poucinam Ci paluszki gdzieś w okolicach łokci - ŁF 2012-10-23 11:24
Dalej są 3. - Endrju 2012-10-23 14:43

Pozostało 580 znaków

2012-10-23 07:06
1
    double iloczyn;
    for (int i=0; i<10; i++)
        {
        iloczyn *= tab[i];
        }

Nie inicjujesz ani zmiennej iloczyn, ani zmiennej suma.


edytowany 1x, ostatnio: Patryk27, 2012-10-23 07:06
Jakiś pajac znów daje wszystkim minusy. Fixed. - Endrju 2012-10-23 14:44

Pozostało 580 znaków

2012-10-23 07:52
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 ;)



bartlomiej-wasik.pl
edytowany 1x, ostatnio: zidu89, 2012-10-23 07:56

Pozostało 580 znaków

2012-10-23 07:52
  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.

Pozostało 580 znaków

2012-10-23 11:53
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

Pozostało 580 znaków

2012-10-23 12:00
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.

Pozostało 580 znaków

2012-10-23 12:01
1

Udalo sie!! po prostu z

srednia_g = pow(iloczyn, 1/10.0)

dzieki za pomoc :)

Na przyszłość proszę nie zakładać wielokrotnie takich samych tematów... - msm 2012-10-23 16:49

Pozostało 580 znaków

Liczba odpowiedzi na stronę

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