Liczby ujemne w pętli

0

Mam taki problem, musze policzyć średnią arytmetyczną. Dla liczb dodatnich jest wszystko ok lecz gdy zaczne pętle od liczby ujemnej to wychodzą złe wyniki

 
#include<stdio.h>

int main()
{
        int i=0;
        float suma=0;

        for(i=-2; i<=6; i++)
        {
                suma+=i;
        }// i tutaj przyjmuje wartość 7 zamiast 9. Dlaczego?
        suma=suma/i;
        
        printf("%f\n",suma);
} 
1

Ale dlaczego miałoby być 9?

for (a; b; c) d;

jest mniej więcej równoważny:

a; while (b) {d; c;}

Zamień to sobie w ten sposób i prześledź. Pętle while mam nadzieję masz w 100% rozkminioną.

0

Poprawiłem to tak ale chciałbym wiedziec czemu tak jest i czy da sie to zrobic w inny sposob

 
#include<stdio.h>

int main()
{
        int i=0;
        float suma=0;

        for(i=-2; i<=6; i++)
        {
                suma+=i;
        }
        suma=suma/(i+=2);

        printf("%f\n",suma);
}
~        
1

Bo sam napisałeś, że pętla ma się wykonywać dopóki i<=6, czyli w pewnym momencie po wykonaniu i++ wartość i będzie równa 7 i pętla się zakończy. Co w tym zaskakującego?

0

No ale ona zaczyna się od -2 aż do 6 więc 9 a nie 7. Dalej tego nie rozumiem. Zamieniłem na while ale to nic mi nie rozjaśniło.
Więc to co napisałem wyżej jest poprawne?

1

Skąd ci się 9 bierze?

For magicznie nie liczy ilości iteracji. Jeśli chcesz policzyć ilość iteracji, to policz je explicite. For nie wymaga też licznika pętli, zamiast zmiennej i typu int możesz wsadzić tam np konia. Przykład:

Koń koń;
for (koń = świeżyKoń(); koń.kolor() != KOLOR_CZERWONY; kopacz.kopKonia(koń)) {
  skoczNaPiwo();
}
0

no bo pętla zaczyna sie od -2 do 6 włącznie to 8 ale dalej nie 7

1

i<=6, czego nie rozumiesz w tym warunku?
Przecież to jasne, że wyjdziesz z pętli jak i > 6, w twoim przypadku i wtedy będzie miało wartość 7.

//Wróć do czytania pierwszych stron kursu, bo nie załapałeś jak działa pętla for.

0

rzeczywiscie nie liczy, ale porażka.
Więc jak mam to zrobic?

1

Policz explicite, np:

int suma, liczba, licznik;
for (suma = 0, liczba = -2, licznik = 0; liczba <= 6; liczba++, licznik++) {
  suma += liczba;
};
wyprintuj(suma, licznik);
0

aaaa dzięki wibowit, juz rozumiem, niby proste ale nigdy bym na to nie wpadl

Dzieki wam za pomoc

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