c++ srednia wierszy

0

Hej, mam problem z pewną funkcją... Ma ona obliczyć średnią w wierszach (tablica dwuwymiarowa) liczb większych od zera i zapisać do tablicy jednowymiarowej. Niestety tylko pierwszy wynik wychodzi mi poprawnie.. reszta jakieś inne liczby. Czy mógłby ktoś spojrzeć na kod i mi doradzić?

double srednia(int A[5][7], double B[5]){
    double wynik = 0.0;
    int licznik = 0;
    int i,j;
    for(i=0; i < 5; i++) {
        for(j = 0; j < 7; j++) {
            if (A[0][j]>0){
            wynik += A[i][j];
            ++licznik;
            }
        }
        B[i] = wynik / licznik;
    } 
    return 0;
}
3

wynik i licznik trzeba zresetować, czyli wyzerować po każdy przejściu przez wiersz ,
co zamierzasz zwracać return'em, chyba nie zero

0

Poprawiłam, ale nadal kolejne wyniki są złe.

void srednia(int A[5][7], double B[5]){
    int i,j;
    for(i=0; i < 5; i++) {
    int licznik = 0;
    double wynik = 0.0;
        for(j = 0; j < 7; j++) {
            if (A[0][j]>0){
            wynik += A[i][j];
            ++licznik;
            }
        }
        B[i] = wynik / licznik;
        cout<<B[i]<<" ";
    }
}
``
1
void srednia(int A[][7], double B[5], int wiersz, int kolumna)
{
    double wynik = 0.0;
    int licznik = 0;
    int i,j;
    for(i=0; i < wiersz; ++i)
    {
        for(j = 0; j < kolumna; ++j)
        {
            if (A[0][j]>0)
            {
                wynik += A[i][j];
                ++licznik;
            }
        }
        B[i] = wynik / licznik;
        wynik = 0, licznik = 0;
    }

}
0

Dziękuję bardzo!
Zmieniłam jeszcze A[i][j]>0 - i teraz dobrze liczy.

1

Nie rozumiem, jeżeli wiersz ma wartości: 5, 0, 0, 0, 0 to średnia ma być 5 czy 1?
Wg mnie musi być 1, ale mam trochę lat na karku, może matematyka się zmieniła?

1
yumi382 napisał(a):

Dziękuję bardzo!

Zmieniłam jeszcze A[i][j]>0 - i teraz dobrze liczy.

Typowa "paniczna" reakcja, która BYĆ MOŻE w selektywnym przypadku sprawia wrażenie, jakby pomogło.

Obecnie masz coś, co programiści sarkastycznie nazywają "parzystą ilością błędów" (w domniemaniu: które się kompensują)

0

tam nie powinno być żadnego warunku if, umknął mi uwadze
"mea culpa, mea maxima culpa"

for(i = 0; i < wiersz; ++i)
    {
        for(j = 0; j < kolumna; ++j)
        {
            wynik += A[i][j];
            ++licznik;
        }
        B[i] = wynik / licznik;
        wynik = 0, licznik = 0;
    }
0

Program miał liczyć średnią liczb dodatnich (większych od zera) w wierszu.

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