#include <stdio.h>
int main (void)
{
int numbers[10] = { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
int i, j;
for ( j = 0; j < 10; ++j )
for ( i = 0; i < j; ++i )
numbers[j] += numbers[i];
for ( j = 0; j < 10; ++j )
printf ("%i ", numbers[j]);
printf ("\n");
return 0;
}
Wynik jaki otrzymuje to: 1 1 2 4 8 16 32 64 128 256
Mam pytanie odnośnie tej części programu:
for ( j = 0; j < 10; ++j )
for ( i = 0; i < j; ++i )
numbers[j] += numbers[i];
Na początku mamy j = 0. Jak rozumiem inkrementacja zajdzie po zakończeniu przejścia wszystkiego w pętli, czyli będziemy mieli j = 1 dopiero, gdy zostanie wykonana ta część kodu, czy tak?
for ( i = 0; i < j; ++i )
numbers[j] += numbers[i];
jeśli jest to prawda to przecież warunek w pętli zagnieżdżonej nigdy nie zostanie spełniony (i < j), ponieważ na początku i = 0 i j =0, więc i nie jest mniejsze od j, a j = 1 dopiero po przejściu pętli czy tak (tak się sugerowałem odpowiedziami na innych forach). W sumie nigdy j nie będzie większe od i, bo przejście i inkrementacja nastąpi dopiero po tym jak się wykona to co jest w środku, czyli najpierw i się zwiększy, a potem j.
Chyba problem jest w tym, że nie rozumiem dokładnie w którym momencie w pętlach zachodzi inkrementacja. Czy jest duża różnica w pętli jeśli chodzi o pre i postinkrementacje.
W zmiennych jest różnica, jeśli napiszemy np.
a = ++b
lub
a = b++
ale nie wiem jak jest w pętlach