Predavanje5 PDF

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 3

1 Ponavljanja ili petlje

Ponavljanja ili petlje u programskim jezicima koristimo ukoliko želimo ponavljati iste retke program-
skog koda više puta. Na primjer, pretpostavite da vas netko zatraži da napišete programski kod koji
ispisuje vaše ime i prezime točno n puta. Jedno od rješenje problema, iako vrlo nepraktično, bi bilo da
n puta napišete identičnu naredbu za ispis u programskom jeziku kojega koristite. Elegantno rješenje
bi bilo korištenjem mehanizma ponavlja ili petlji. Razlikujemo tri različite vrste petlji u programskom
jeziku C++ a to su for petlja, while petlja te do-while petlja.

1.1 for petlja


for petlja se koristi za ponavljanje nekog programskog koda točno odredeni broj puta. Broj ponav-
ljanja je odreden specijalnom cjelobrojnom varijablom koju nazivamo brojač te intervalom u kojemu
je brojač definiran (vidite sliku 1).

Je li brojac T
unutar intervala
definicije? for(int brojac = poč_vrijed; brojač # kraj_vrijed; promjeni brojač)
{
tvrdnja 1
neki programski kod;
F tvrdnja 2
}

tvrdnja N

promjeni
brojac

Slika 1: Logički slijed izvodenja for petlje (lijevo). Sintaksa for petlje u C++-u (desno), gdje oznaku
# valja zamjeniti s jednim od operatora nejednakosti, ≤, <, ≥ ili >.

Promotrite sljedeći primjer for petlje


for(int i=1; i<=10; i++)
{
cout << "i = " << i << endl;
}
te pokušajte odgovoriti na sljedeća pitanja.
• Kako se zove brojač u gornjem primjeru?
• U kojem intervalu je brojač definiran?
• Na koji način je definirana promjena brojača nakon svake iteracije?
• Koliko puta će se ponoviti ispisivanje vrijednosti varijable i te kako će ispis izgledati?
Ukoliko znate odgovoriti na sva gore postavljena pitanja, tada vrlo vjerojatno u potpunosti razumijete
na koji način funkcionira ova petlja. Primjetite da je brojač cjelobrojna varijabla i koja poprima
vrijednosti iz skupa {1, 2, . . . , 10}. Sama promjena brojača je definirana s i++ što znači da se brojač
i inkrementira za 1 nakon svake iteracije. Dakle, brojač i će poprimiti sve vrijednosti iz skupa
{1, . . . , 10}, dok će naredba cout i ispisati te vrijednosti na standardni izlaz.
Zadatak za vježbu 1. Pokušajte razumjeti sljedeći primjer te kako će izgledati ispis.
for(int x=20; x>9; x--)
{
cout << "vrijednost brojaca x = " << x << endl;
}

1
Za sam kraj, promotrite sljedeće dva primjera koja oba ispisuju sve parne brojeve od 1 do 99.

for(int i=10; i<100; i=i+2) for(int i=10; i<100; i++)


{ {
cout << i << endl; if (i%2 == 0)
} cout << i << endl;
}
U lijevom primjeru brojač se inkrementira za 2 nakon svake iteracije. Budući je početna vrijednost
brojača paran broj 10, cout naredba će uistinu ispisati sve parne brojeve. U desnom primjeru se koristi
binarni operator % koji vraća ostatak pri djeljenju. Tako da bez obzira što sam brojač poprima sve
vrijednost od 1 do 99, ispisuju se samo one koje su djeljive s 2. Primjetite da bi korištenjem operatora
% vrlo jednostavno u jednoj for petlji mogli napisati i općenitiji program koji testira sve brojeve od
1 do 100 jesu li parni ili ne.

1.2 while petlja


while petlja se koristi za ponavljanje nekog programskog koda, a da unaprijed eksplicitno nije zadan
broj ponavljanja. Sama petlja će se izvršavati sve dok je neki uvjet logičkog tipa ili tzv Boole-ov izraz
istinit (vidite sliku 2).

Sve dok T while(BOOLE-ov izraz istinit)


BOOLE−ov {
izraz
Programski kod koji nužno mora utjecati na to hoće li
BOOLE-ov izraz ostati istinit, ili će postati laž;
Niz tvrdnji koje
utjecu na istinitost }
F BOOLE−ovog
izraza

Slika 2: Logički slijed izvodenja while petlje (lijevo). Sintaksa while petlje u C++-u (desno).

Promotrite sljedeći primjer korištenja while petlje.


int x = 5;
while(x>0)
{
cout << "x = " << x << endl;
x = x-1;
}
te pokušajte odgovoriti na sljedeća pitanja.
• Koliko iteracija će petlja imati i zašto?
• Što bi se desilo da redak x = x-1; izbacite, ili zamjenite s retkom npr. x = x+1;?
• Što bi se desilo ukoliko bi zamjenili boole-ov izraz x>0 s x<0?
Primjetite da će se petlja ponoviti 5 puta te da će se u svakoj iteraciji petlje vrijednost x ispisati na
standardni izlaz te dekrementirati za 1. Ukoliko retka x=x-1; ne bi bilo, sama petlja bi se ponavljala
beskonačno dugo iz razloga što bi uvjet x>0 uvijek bio istinit. I u slučaju da se x=x-1; zamjeni s
x=x+1; kao rezulat će se generirati beskonačna petlja. Ukoliko bi zamjenili boole-ov izraz u x<0 kod
unutar same petlje se ne bi nikad izvršio.
Primjer 1. Napišite program koji zbraja brojeve 1 + 2 + 3 + . . . sve dok suma ne postane veća ili
jednaka 100 te ispiše dobivenu sumu.

2
int suma = 0;
int broj = 0;
while(suma<100)
{
broj = broj + 1;
suma = suma + broj;
}
cout << "suma je : " << suma << endl;
Zadatak za vježbu 2. Primjetite da će u primjeru 1 varijabla suma poprimiti vrijednost veću ili
jednaku broju 100. Modificirajte rješenje tako da dobivena suma bude striktno manja od 100.

1.3 do-while petlja


Vjerojatno i najrjede korišteni oblik petlje ili ponavljanja. Vrlo je slična while petlji s tom razlikom
da prvo izvrši kod unutar petlje, a tek onda provjeri istinitost logičke tvrdnje (vidite sliku 3).

Niz tvrdnji koje


utjecu na istinitost
BOOLE−ovog do {
izraza
Programski kod koji nužno mora utjecati na to hoće li
BOOLE-ov izraz ostati istinit, ili će postati laž;

}while(BOOLE-ov izraz istinit);


Sve dok
BOOLE−ov
izraz T

Slika 3: Logički slijed izvodenja do-while petlje (lijevo). Sintaksa do-while petlje u C++-u (desno).

Promotrite sljedeći primjer korištenja do-while petlje.

int x = 5;
do {
cout << "x = " << x << endl;
x = x-1;
} while(x>0)

Primjetite da ne postoji razlike izmedu ovog koda i identičnog primjera kojega smo koristili kao
ilustraciju while petlje. Medutim, ukoliko bi boole-ov izraz x>0 zamjenili s x<0, tada bi ipak došlo
do razlike. U kontekstu do-while petlje kod unutar petlje bi se izvršio barem jednom neovisno od
toga je li boole-ov uvjet zadovoljen ili nije.
Zadatak za vježbu 3 (Jednostavni kalkulator). Napišite program pomoću do-while petlje koji će
prikazati sljedeći izbornik:
1. Zbrajanje
2. Oduzimanje
3. Množenje

4. Djeljenje
5. Izadi van

You might also like