$$ \newcommand{\floor}[1]{\left\lfloor{#1}\right\rfloor} \newcommand{\ceil}[1]{\left\lceil{#1}\right\rceil} \newcommand{\mod}{\,\mathrm{mod}\,} \renewcommand{\div}{\,\mathrm{div}\,} \newcommand{\metar}{\,\mathrm{m}} \newcommand{\cm}{\,\mathrm{cm}} \newcommand{\dm}{\,\mathrm{dm}} \newcommand{\litar}{\,\mathrm{l}} \newcommand{\km}{\,\mathrm{km}} \newcommand{\s}{\,\mathrm{s}} \newcommand{\h}{\,\mathrm{h}} \newcommand{\minut}{\,\mathrm{min}} \newcommand{\kmh}{\,\mathrm{\frac{km}{h}}} \newcommand{\ms}{\,\mathrm{\frac{m}{s}}} \newcommand{\mmin}{\,\mathrm{\frac{m}{min}}} \newcommand{\smin}{\,\mathrm{\frac{s}{min}}} $$

Petlje - WHILE

  • Dozvoljeno polaganje
  • Lekcije
  • Nema
  • Koshi
  • 7/24/2015

Mi programe obično pišemo da bismo automatizovali neki postupak koji je često repetitivan. Recimo da treba nešto da uradimo 1000 puta. Recimo da ispišemo neki tekst. Jedan način da napišemo program koji ovo radi je da ponovimo komandu za ispisivanje koliko je potrebno puta:

 

#include <iostream>

 

using namespace std;

 

int main()

{

cout << "Zdravo!" << endl;

cout << "Zdravo!" << endl;

cout << "Zdravo!" << endl;

cout << "Zdravo!" << endl;

cout << "Zdravo!" << endl;

 

...

 

cout << "Zdravo!" << endl;

}

 

Ovaj naš program bi imao preko 1000 linija! Kada bismo recimo nekoj osobi objašnjavali da nešto uradi 1000 puta, ne bismo joj rekli: "Uradi to. Sad uradi ponovo to. Pa ponovo… ", već bismo mogli samo da kažemo da uradi nešto određen broj puta. To je ono što želimo da uradimo u našem programu, da imamo način da kažemo računaru da nešto uradi određen broj puta bez da u programu to napišemo koliko puta je potrebno.

 

Ovaj problem rešavamo koristeći nešto što se zove petlje. Pogledajmo kako bi naše rešenje problema izgledalo ako to upotrebimo:

 

#include <iostream>

 

using namespace std;

 

int main()

{

int broj_ponavljanja = 0;

while (broj_ponavljanja < 1000)

{

cout << "Zdravo!" << endl;

broj_ponavljanja++;

}

}

 

Uspeli smo da dužinu programa smanjimo sa preko 1000 linija na samo 13!

 

Šta je ovde novo? To je deo koji izgleda ovako:

 

while (USLOV)

{

   KOMANDE UNUTAR PETLJE

}

 

Ključna reč while označava petlju. Petlja je deo koda koji se izvršava dokle kod je USLOV te petlje zadovoljen. Dakle, kada dođemo do petlje u kodu računar proverava da li je USLOV ispunjen, ako jeste on izvršava KOMANDE UNUTAR PETLJE. Nakon što ih izvrši, vraća se ponovo do USLOVA, ako je on i dalje ispunjen KOMANDE UNUTAR PETLJE se ponovo izvršavaju. Sve se to ponavlja dokle god uslov ne postane netačan.

 

Sada kada ovo znamo razmislimo kako bismo iskoristili while petlju da ponovimo nešto fiksni broj puta. Imaćemo neku promenljivu koju ćemo koristiti da brojimo koliko puta smo za sada ponovili komande unutar petlje (int broj_ponavljanja = 0;).  Ponavljaćemo postupak sve dok je broj ponavljanja koji smo uradili manji od 100 (while (broj_ponavljanja < 100)). Na kraju svakog prolaska kroz petlju nakon što izvršimo ono što hoćemo (cout << "Zdravo!" << endl;) uvećamo broj ponavljanja koje smo uradili za 1 (broj_ponavljanja++;).

 

Pogledajmo diagram while petlje:

OK, ali šta ako ne znamo unapred koliko puta želimo da ponovimo petlju? Šta ako umesto da ispišemo poruku 1000 puta hoćemo da unesemo koliko puta želimo to da uradimo?

 

Naše rešenje bi bilo izuzetno slično kao u prethodnom slučaju:

 

#include <iostream>

 

using namespace std;

 

int main()

{

int koliko_puta;

cout << "Unesite koliko puta želite da ispišete poruke: ";

cin >> koliko_puta;

 

int broj_ponavljanja = 0;

while (broj_ponavljanja < koliko_puta)

{

cout << "Zdravo!" << endl;

broj_ponavljanja++;

}

}

 

Jedino što smo promenili, pored dodavanja učitavanja broja koliko puta želimo da izvršimo ponavljanje, je što uslov u petlji više nije:

 

broj_ponavljanja < 1000

već je:

 

broj_ponavljanja < koliko_puta

 

 

Postoji jedna stvar na koju treba da obratiš posebnu pažnju kada koristiš petlje. Razmislimo šta bi se desilo da smo zaboravili da uvećamo broj ponavljanja petlje u našem primeru:

 

#include <iostream>

 

using namespace std;

 

int main()

{

int broj_ponavljanja = 0;

while (broj_ponavljanja < 1000)

{

cout << "Zdravo!" << endl;

}

}

 

Krenimo da prolazimo kroz naš program komandu po komandu.

 

  • Prvo postavimo broj_ponavljanja na 0.
  • Uslov petlje je ispunjen (0 je manje od 1000).
  • Ispiše se poruka.
  • Uslov se ponovo proverava, i dalje je ispunjen (opet je 0 manje od 1000).
  • Ispiše se poruka.
  • Uslov se opet proverava…

 

Pošto nigde ne menjamo vrednost promenljive broj_ponavljanja uslov će uvek biti ispunjen i naša petlja nikada neće prestati da se izvršava. Ovakvu petlju zovemo beskonačna i nešto je što želimo da pazimo da uvek izbegnemo.