[C] Petlje

Započeo Dragi, Avgust 21, 2018, 13:11:46 POSLE PODNE

prethodna tema - sledeća tema

0 članova i 1 gost pregledaju ovu temu.



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.


Poslednja Izmena: Avgust 21, 2018, 13:16:10 POSLE PODNE od |Gagi|
»Sve što je na Zemlji, prolazno je...«