Petlje: while / do...while
Petlja “while”
Postaviću vam jedno čudno pitanje: koliko dugo perete ruke? Nemojte da razmišljate o tome već samo odgovorite. Ako su vam ruke veoma prljave, perete ih veoma dugo, a inače vam treba manje vremena:
while moje_ruke_su_prljave
Perem_ruke;
Napomenimo da ovo takođe znači da ako su vam ruke čiste, nećete ih prati.
Ovo je jedan od načina kako se izvršavaju petlje u programskom jeziku C.
U opštem slučaju, petlja (engl.loop) izgleda kao :
while(uslov)
obrada;
Ovde možete da vidite sličnost sa instrukcijom if. U čemu je razlika? Kada je uslov ispunjen, if će da izvrši obradu jednom, dok kod while ponavlja se izvršavanje dokle god je uslov ispunjen.
Da ponovimo - karakteristično za programski jezik C: Uslov je ispunjen - true - ako mu je vrednost različita od 0, a uslov nije ispunjen ako mu je vrednost jednaka 0 !
Bitne stvari koje treba znati u vezi petlji:
-
ako je potrebno da se unutar petlje while izvrši više od jedne instrukcije, morate (kao i kod if) da koristite blok :
while(uslov)
{
obrada_1;
obrada_2;
:
obrada_n;
}
-
instrukcija ili instrukcije koje se izvršavaju unutar petlje nazivamo telo petlje;
-
ako odmah na početku uslov “nije ispunjen (engl.false)” (jednak nuli) tj. prvi put kada se proverava njegova vrednost, telo petlje neće biti izvršeno nijednom (kao u prethodnom primeru kada nećete prati ruke ako nisu prljave)
-
u telu petlje bi trebalo da može da se promeni vrednost ispunjenosti uslova, jer ako je uslov na početku ispunjen, i ako mu se uopšte ne promeni vrednost, moglo bi se desiti da se telo petlje beskonačno puta uzvršava (beskonačna petlja ili mrtva petlja - radili smo to ranije) (u prethodnom primeru će pranje ruku da promeni stanje uslova - ruke više neće biti prljave u nekom momentu).
U nastavku je dat primer petlje koja ne može da završi svoje izvršavanje. Ova petlja će beskonačno da na ekran štampa poruku "Zaglavio sam u petlji":
while(1)
{
printf("Zaglavio sam u petlji");
}
Petlja “do” (ili uradi to bar jednom)
Ono što ste do sada naučili je da petlja while ima dve važne karakteristike:
-
uslov se proverava pre ulaska u telo petlje;
-
u telo petlje se ne ulazi ako uslov nije ispunjen (engl.false).
Ovo ponekad može da zakomplikuje rešavanje problema. Zbog toga u programskom jeziku "C" postoji još jedna vrsta petlje koja se ponaša suprotno od petlje while. Ta druga petlja radi na sledeći način:
-
uslov se proverava nakon izvršenja tela petlje;
-
telo petlje se izvršava bar jedanput, čak i ako uslov nije ispunjen.
Petlja “do” :
do
obrada;
while(uslov);
ili ako ima više od jedne naredbe koja treba da se izvrši u telu petlje, mora da se koristi blok:
do {
obrada_1;
obrada_2;
:
obrada_n;
} while(uslov);