Programska petlja while

1. Petlja while

1.4. Primjer 4.

Bez upisivanja programa odgovorite koliko će se puta izvršiti ova petlja?

int i=100,suma=0;
while(i)
{
     suma+=--i;
     i++;
}

 

Rješenje

Ova će se petlja izvršavati beskonačno.

Početna vrijednost varijable i je 100. Uvjet je samo (i) i dok god je i različit od 0 naredbe u petlji while će se izvršavati. Unutra petlje while nalazi se naredba koja računa zbroj varijabli i (suma+=--i;), ali ta naredba ujedno i dekrementom smanjuje vrijednost varijable i na 99. Naredba i++; ponovo povećava vrijednost varijable i na 100, nakon toga se program vraća na uvjet u naredbi while.

Ako dodate naredbu printf("\n%d\t%d",suma,i); između naredbe suma+=--i; i naredbe i++;vidjet ćete promjene varijabli suma i i. Pokretanjem tako popravljenog programa vidjet ćete kako se mijenja varijabla suma. U jednom od koraka izvođenja programa varijabla suma poprimit će negativan predznak.

Zašto?

Da bismo odgovorili na to pitanje moramo se prisjetiti prikaza cijelih brojeva u računalu. S obzirom na to da je memorija računala ograničena, cijeli se brojevi prikazuju u određenom broju bitova (konkretno int se prikazuje u 32 bita). U jednom koraku izvođenja programa vrijednost varijable suma će biti veća od najvećeg broja koji stane u 32 bita. Višak bitova neće imati mjesto u memoriji i zanemariti će se, procesor će broj interpretirati kao negativan.