Osnovni ciklusi
![]() |
![]() |
![]() |
while |
do ... while |
for |
|
(dokle god je uslov ispunjen, |
(prvo jednom odradi telo ciklusa, |
(ovde znamo koliko će se puta ponoviti ) |
|
while(uslov) |
do { |
primer: for(i=0;i<100;i++) |
U prvom polugodištu smo radili algoritme sa cikličnom strukturom (kliknite na link ako želite da se podsetite).
Ovde je naglasak na način kako se to radi u programskom jeziku C:
U C-u postoje tri naredbe kojima se mogu implementirati programi sa cikličnom strukturom. To su:
- for
- while
- do..while.
Svaka od ovih naredbi omogućava nam da implementiramo ponavljanje bloka naredbi. Jedno izvršavanje bloka naredbi u okviru petlje naziva se iteracija.
Naredba while
Sintaksa naredbe while je:
while (uslov){
blok naredbi;
}
Dijagram toka koji ilustruje izvršavanje while naredbe:

Prvo se proverava ispunjenje zadatog uslova, ukoliko je uslov ispunjen, izvršava se blok naredbi i ide se ponovo na proveru uslova. Ukoliko uslov nije ispunjen izlazi se iz while petlje i nastavlja sa izvršavanjem naredbi posle while naredbe. Ovde možemo zaključiti da se blok naredbi u while-u ne mora izvršiti ni jednom. Uslov while naredbe je logičkog tipa, odnosno u C-u celobrojnog tipa.
Pre ulaska u petlju vrši se inicijalizacija promenljivih koje će biti korišćene bilo u uslovu, bilo u telu petlje. U telu petlje se mora nalaziti kod koji će baratati sa promenljivama koje formiraju uslov za ostanak u petlji.
int i=1;
while(i<=10){
printf("%d",i);
i++;
}
štampa brojeve od 1 do 10 na standardni izlaz.
U slučaju inicijalizacije i sa bilo kojim brojem većim od 10 petlja se ne bi izvršavala i na izlazu ne bi smo dobili ništa.
Naredba do..while
Sintaksa naredbe do..while je:
do{
blok naredbi;
}while(uslov)
Dijagram toka koji ilustruje izvršavanje naredbe do...while:

Naredba se izvršava tako što se prvo izvrši blok naredbi, nakon čega se proverava ispunjenost uslova. Ukoliko je ispunjen uslov, ponovo se izvršava blok naredbi, ukoliko uslov nije ispunjen izlazi se iz petlje i nastavlja se sa izvršavanjem naredbi koje su navedene posle do..while naredbe. Osnovna razlika između naredbi while i do..while je što će se kod naredbe do..while blok naredbi sigurno izvršiti barem jednom.
Posmatrajmo sada zadatak da treba učitati broj koji je deljiv sa tri i dok korisnik ne unese takav broj ponovo ispisujemo isti zahtev. Ovakav zadatak je najbolje implementirati korišćenjem do..while naredbe:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int broj;
do{
printf("unesite broj deljiv sa tri: \n");
scanf("%i", &broj);
}while(broj%3!=0);
printf("%i / 3 = %i", broj, broj/3);
return 0;
}
Zbog prirode do..while naredbe korisniku će se zahtev ispisati barem jednom, nakon učitavanja broja proverava se uslov, a to je da broj nije deljiv sa tri, ako je ovaj uslov ispunjen, znači da nismo učitali dobar broj i izvršava se sledeća iteracija do..while naredbe, ako uslov nije ispunjen, znači da je učitan broj deljiv sa tri i završava se izvršavanje do..while naredbe.
Naredba for
Sintaksa for naredbe je
for(inicijalizacija; uslov; inkrementacija){
blok naredbi
}
Dijagram toka koji ilustruje način izvršavanja for naredbe:

Prvo se izvrši inicijalizacija, i zatim se proverava uslov. Ukoliko je njegova vrednost tačna (odnosno u C-u različita od 0), ulazi se u blok naredbi koji je naveden u petlji. Kada se izvrše sve naredbe izvršava se inkrementacija i tok programa se vraća na ponovno ispitivanje uslova. Opisani proces se ponavlja sve dok je ispunjen uslov. Ako uslov nije ispunjen izlazi se iz petlje i nastavlja se sa izvršavanjem naredbi koje su navedene posle for petlje. Deo za inkrementaciju ne mora uvek da znači povećanje vrednosti neke promenljive za jedan, to može da bude proizvoljno povećanje ili smanjenje vrednosti promenljive, a najčešće se menja vrednost promenljive koja se pojavljuje u uslovu.
Ako bismo posmatrali problem izračunavanja zbira svih parnih brojeva u intervalu od nula, do nekog zadatog broja n, ovaj zadatak bi se mogao jednostavno implementirati korišćenjem for naredbe.
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i, n;
int zbir = 0;
printf("Unesite broj n:\n");
scanf("%i", &n);
for(i=0; i<=n; i+=2){
zbir +=i;
}
printf("Zbir parnih brojeva od 0 do %d jednak je %d.", n, zbir);
return 0;
}
Na početku definišemo sve potrebne promenljive, to je promenljiva n koja predstavlja ulazni podatak, promenljiva i koji će se koristiti kao brojač u for petlji i promenljiva zbir u kojoj će se akumulirati zbir u toku izvršavanja petlje. Promenljivoj zbir na početku dodeljujemo vrednost 0, a u for petlji ćemo joj dodavati parne brojeve.
Nakon što korisnik unese broj n ulazi se u for petlju koja u delu za inicijalizaciju postavlja vrednost brojača na nula, uslov za izlazak iz petlje je da smo došli do broja n (u obzir uzimamo samo brojeve koji su manji ili jednaki sa n), a u delu za inkrementaciju brojač povećavamo za dva, jer se traže samo parni brojevi. U for petlji je navedena jedna naredba koja trenutni zbir povećava za brojač i koji će u svakoj iteraciji for petlje imati sledeći parni broj u intervalu od 0 do n.
break i continue
Postoje dve ugrađene naredbe koje mogu da promene tok izvršavanja petlji i mogu se koristiti u kombinaciji sa bilo kojom od tri navedene naredbe ponavljanja.
Prva je naredba break, koja prekida proces izvršavanja petlje, a druga je naredba continue koja prekida izvršavanje jedne iteracije petlje.
Način na koji naredba break funkcioniše ako se pozove u petlji može se ilustovati na sledeći način

Ovde se naredba break koristi u while petlji, ali na isti način se može pozvati i sa ostalim naredbama ponavljanja. Ako se toku izvršavanja petlje u određenoj grani pozove naredba break, na tom mestu se prekida izvršavanje petlje i prelazi se na sledeću naredbu posle petlje.
Zadatak sa učitavanjem broja koji je deljiv sa 3 koji smo prethodno uradili korišćenjem do..while naredbe može se implementirati korišćenjem while petlje i naredbe break:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int broj;
while(1){
printf("unesite broj deljiv sa tri: \n");
scanf("%i", &broj);
if(broj%3==0)
break;
}
printf("%i / 3 = %i", broj, broj/3);
return 0;
}
Ovde smo izabrali da napravimo beskonačnu petlju (uslov za naredbu while je uvek tačan), ali čim dobijemo odgovarajući broj izlazimo iz petlje naredbom break i program nastavlja sa naredbom posle while-a, odnosno ispisuje rezultat deljenja unetog broja sa 3.
Naredba continue ne prekida celu petlju već trenutnu iteraciju i može se ilustrovati na sledeći način

Kada se u toku izvršavanje petlje u nekoj grani programa naiđe na naredbu continue, prekida se izvršavanje trenutne iteracije, odnosno preskaču se naredbe u bloku naredbi 2 i tok izvršavanja programa vraća se na ispitivanje uslova za sledeću iteraciju petlje (for, while ili do..while). Ukoliko je uslov ispunjen, izvršava se sledeća iteracija petlje.
Naredba continue se može iskoristiti u implementaciji programa koji sabira 10 brojeva koji se unose preko konzole, ali izostavlja negativne brojeve.
# include <stdio.h>
int main()
{
int i;
double broj, suma = 0.0;
for(i=1; i <= 10; ++i){
printf("Unesite broj %d: ",i);
scanf("%lf",&broj);
// ako korisnik unese negativan broj, preskacemo ga
if(broj < 0.0){
continue;
}
suma += broj;
}
printf("Suma = %.2lf",suma);
return 0;
}
Imamo for petlju koja će imati deset iteracija, u svakoj iteraciji učitavamo broj preko konzole i ako je unet negativan broj naredbom continue prelazimo na sledeću iteraciju, odnosno preskačemo naredbu koja sabira uneti broj sa trenutnom sumom.


