c++ srednia wierszy

c++ srednia wierszy
Y3
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 15
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ć?

Kopiuj
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;
}
N2
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 14
3

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

Y3
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 15
0

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

Kopiuj
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]<<" ";
    }
}
``
N2
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 14
1
Kopiuj
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;
    }

}
Y3
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 15
0

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

_13th_Dragon
  • Rejestracja: dni
  • Ostatnio: dni
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?

AK
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3561
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ą)

N2
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 14
0

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

Kopiuj
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;
    }
Y3
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 15
0

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

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.