U programskom jeziku C imamo tri osnovne petlje. Petlja while, do while i for.
1. Naredba while
Ovo je najednostavnija naredba.
while(izraz)
naredba (onda ide naredba koju želimo da se ponavlja, ona će se izvršavati dokle god je neki uslov ispunjen)
Izraz kao rezultat mora dati neki broj. Znamo da u C ne postoji true/false, 1/0, kao zamenu za true/false koristimo bilo koji celobrojni if sa konvencijom da 0 oznaÄava logiÄku laž, a sve razliÄito od 0 oznaÄava logiÄku istinu. Sada zamislimo da postoje neke naredbe iznad petlje while, pa najzad doalzimo do while, prvo izraÄunavamo izraz i znamo da Äe se izraÄunavati barem jednom. Ako je taj izraz dao neku celobrojnu vrednost razliÄitu od 0, to vodimo kao logiÄku istinu i idemo na izvrÅ¡avanje samo jedne naredbe. Ako želimo viÅ¡e naredbi, otvaramo blok, vitiÄaste zagrade i opet smo napisali samo jednu naredbu samo Å¡to je to sada blok naredbi. Nakon izvrÅ¡avanja naredbe, izvrÅ¡avanje programa se sada vraća ponovo na poÄetak, ponovo se vraća na izraz, ako je izraz ponovo izraÄunao vrednost razliÄitu od 0, ponovo se izvrÅ¡ava naredba i tako u krug sve dok izraz ne dobije vrednost 0. Ako se nikada ne dobije vrednost 0, dobijamo tkz. beskonaÄnu petlju.
while(n < 100)
scanf("%d, &n");
Ovaj primer radi jednostavno. Scanf je naredba koja traži unos od korisnika sa konzole. Dok je n manje od 100 izvrÅ¡avaj naredbu scanf. Ovo zapravo znaÄi, dokle god korisnik unosi broj manji od 100, ponovo mu daj da unese broj. Ako korisnik prvi put unese broj koji je veći od 100, prekida se izvrÅ¡avanje i program nastavlja sa prvom naredbom ispod ove while petlje.
while(n >=0) {
int k;
printf("%d\n", n);
scanf("%d", &k);
n = n - k;
}
Varijabla n bi morala biti deklarisana negde ispred tj. iznad petlje. Predpostavimo da je deklarisana tako da je veća ili jednaka od 0 da bi mogli ući u petlju. Onda program deklariÅ¡e jednu lokalnu varijablu za ovu petlju. Ova varijabla k će se alocirati za svaki proalz ove petlje. Kada se zavrÅ¡i jedan prolaz petlje, varijabla k nestane. Krećemo u drugu interakciju petlje, alocira se potpuno nova varijabla k. Tako da varijabla k postoji samo u jednom koraku petlje. Ne možete sa njom preneti nikakvu informaciju iz jednog koraka u drugi. Varijabla n je deklarisana negde pre petlje i ona zadržava vrednost izmeÄ'u dva prolaska petlje.
Program ispiše trenutnu vrednost varijable n. Zatraži od korisnika da unese vrednost varijable k i onda za tu vrednost umanji vrednost varijable n. I tako se vrti u krug dokle god je varijabla n veća ili jednaka od 0.
1. Naredba for
Ova petlja je vrlo sliÄna petlji while po funkcionalnosti, ali ima mnogo drugaÄiju sintaksu.
Sintaksa:
for(izraz; izraz; izraz)
naredba
Izrazi su odvojeni znakom taÄka-zarez!
Izraz jedan je napisan unutar for petlje, ali će se izvrÅ¡iti bezuslovno samo jednom. Nakon izraza 1 se izraÄuvana izraz 2 koji kao rezultat mora dati broj. Izraz 2 će odrediti uslov dokle će se ova petlja vrteti na naÄin dokle god izraz 2 izraÄuvanava ne 0, izvrÅ¡avaju se naredbe ove petlje, kada se prvi put izraÄuna 0 na izrazu , petlja se prekida. ZnaÄi imamo izraz 1 koji se izvrÅ¡ava jednom. Izraz 2 provera uslova i onda izvrÅ¡avanje naredbe. Pazite, nismo ni dodirnuli izraz 3. Nakon izvrÅ¡avanja svih naredbi for petlje, tek tada se izraÄunava izraz 3. Nakon izraÄunavanja izraza 3, ponovo se vraća na izvraÄunavanje izraza 2(provera uslova) i ako je uslov logiÄki istinit(razliÄit od 0), ponovo se nastavlja izvrÅ¡avanje naredbe.
Proveri uslov, proveri naredbu, izvrši izraz 3, izraz 2, naredba, izraz 3, izraz 2, naredba, izraz 3 u tako u krug se vrti.
- Bilo koji od ova tri izraza se sme izostaviti!
Ako se izostavi izraz 1, neće se niÅ¡ta izvrÅ¡iti. Izraz 3 ako se izostavi, nakon izvrÅ¡avanja naredbi on se preskaÄe i kreće izvrÅ¡avanje izraza 2.
Po standardu, ako se izostavi izraz 2 u for petlji, podrazumeva se logiÄka istina.
for( ; ; ) {
.....
}
Ova petlja neće niÅ¡ta izvrÅ¡iti kada prvi put doÄ'e do izvrÅ¡avanja iste i uslov je uvek ispunjen. ZnaÄi da je ovo beskonaÄna petlja. Ako želite da petlja nema nikakvu inicijalizaciju, proveru uslova na poÄetku, korak izvrÅ¡avanja, onda se koristi ova petlja.
Ekvivaletna while petlja.
while( 3 ) {
.....
}
Upotrebio sam bilo koji broj razliÄit od nule i dobio sam ponovo beskonaÄnu petlju.
Jedan primer kako da prebacimo while petlju u for petlju.
int i;
i = 1;
while(i<=10) {
printf("%d", i);
i = i + 1;
}
int i;
i = 1;
for(i=1; i<=10; i=i+1) {
printf("%d", i);
}
Ovo su dve potpuno analogne petlje. Rade isti kod, prevode se u isti maÅ¡inski kod. Jedina razlika je možda nekim programerima je da je for petlja preglednija. Iz for petlje nam je sve uoÄljivo u jednoj liniji dok u while petlji bismo morali analizirati sve, logiÄki deo, inkrement... Samo je razlika u sintaksi, preglednosti.
Primer:
for(i=0; i<10; i=i+1) {
printf("%d", i);
}
ZnaÄi imamo poÄetnu vrednost 0 i granicu 9. Da je izraz 2 glasio ovako "i<=10", broj 10 bi se ukljuÄio.
for(n = 50; 1; z = z * 2) {
printf("%d %lf", n, z);
m = m + n;
}
Inicijalizacija varijable n na 50. Izraz 2(provera uslova) nam je konstanta 1(LogiÄka istina, uvek je istinit, beskonaÄna petlja). Izraz 3 je potpuno nezavisan u odnosu na izraz 1 i 2 jer radimo sa potpuno drugom varijablom. Varijablu z dupliramo. Ova tri izraza uopÅ¡te nisu povezana jedan sa drugim i to je dopuÅ¡teno raditi u C.
Varijable z,n nisu morale biti iskorišćene.
Naredbe, izraz 1,2,3 nisu logiÄki povezani jedni sa drugim.
1. Naredba do
Ovo je petlja koja se retko koristi u programiranju.
do
naredba
while(izraz);
Kada izvrÅ¡avanja doÄ'e do petlje do, izvrÅ¡i samo jednom naredbu bezuslovno. Kod for i while telo može da se ne izvrÅ¡i niti jednom. Kod do petlje imamo garanciju da će se telo izvrÅ¡iti barem jednom. Naredba ove petlje će se sigurni izvrÅ¡iti jednom tokom prvog prolaska. Tek Å¡to se naredba izvrÅ¡ila, izraÄunava se izraz koji daje broj, ako je broj ne 0(LogiÄka istina), izvrÅ¡avanje se vraća na na izvrÅ¡avanje petlje i ponavlja se naredba. Do while petlja ima tu specifiÄnost da će izvrÅ¡iti svoju naredbu jednom ili viÅ¡e puta, ali jednom sigurno.
Ako vam neÅ¡to nije jasno, slobodno napiÅ¡ite. Potrudio sam se da objasnim na najlakÅ¡ i najboljii naÄin koji znam.
Praviću još dosta da nazovem tutorijala u vezi C, C++, Jave,PHP.. Polako.
Pohvale , dobar tut.
Dobar tut.Bravo ;D