You are on page 1of 6

Osnovi programiranja

dr Boban Stojanovi

Naredbe uslovnog grananja


Reavanje veine problema esto zahteva izvravanje odreenog dela programa u zavisnosti od
ispunjenosti nekog uslova. Iz tog razloga neophodno je postojanje razgranatih struktura, koje se u
programskom jeziku Pascal ostvaruju korienjem naredbe uslovnog grananja if i naredbe viestrukog
grananja case.

Naredba uslovnog grananja IF


Naredba uslovnog grananja if omoguava izvravanje odreenog dela programa u zavisnosti od toga da li
je navedeni uslov ispunjen ili ne. Ukoliko je uslov ispunjen, tj. ukoliko je vrednost logikog iskaza tano
(true), onda se izvrava jedna naredba ili blok naredbi navedenih unutar komande if. Ukoliko je vrednost
logikog izraza netano (false), moe se izvriti neka druga naredba, odnosno blok naredbi.
Sintaksa
if<logicki_izraz>then<naredba1>[else<naredba2>];

Korienjem ovakve if then else konstrukcije mogue je formirati vie oblika uslovnog grananja, kao
to su: jednostruko, dvostruko i viestruko grananje.

Jednostruko grananje
Kod jednostrukog grananja raunar ispituje vrednost logikog izraza i ukoliko je ova vrednost tano (true),
izvrava se naredba, odnosno blok naredbi iza rezervisane rei then. Ukoliko je vrednost izraza netano
(false), ova naredba se ne izvrava.
Na slici je prikazan ematski prikaz ovakvog grananja:

Uslov

da

ne
Komanda

Slika ### ematski prikaz jednostrukog grananja

Pascal kod koji bi odgovarao ovakvoj vrsti grananja bi bio:


iflogiki_izrazthennaredba;

ili
iflogiki_izrazthen
begin
naredba_1;
naredba_2;
...
naredba_n;
end;

Osnovi programiranja

dr Boban Stojanovi

Primer
Napisati program koji na osnovu broja utroenih kilovata elektrine energije P i cene po kilovatu C,
izraunava ukupnu naknadu koju potroa treba da plati T. Ukoliko je naknada vea od 1000 dinara, raun
se uveava za 10%, kako bi se stimulisala tednja elektrine energije.
programStruja;
const LIMIT=1000.0;{Limitiznadkogaseuvecavanaknada}
PENALI=10.0;{Procenatzakojiseuvecavanaknada}
var P,C,T:real;
begin
writeln('UnesitebrojutrosenihkilovataP:');
readln(P);
writeln('UnesitecenupokilovatuC:');
readln(C);

T:=P*C;

ifT>LIMITthenT:=T+T*PENALI/100.0;

writeln('Vasracunzaelektricnuenergijuje',T,'dinara.');
end.

Dvostruko grananje
U sluaju dvostrukog grananja, ukoliko je logiki izraz taan izvrava se naredba ili blok naredbi iza
rezervisane rei then, a ako logiki izraz nije taan izvrava se naredba, odnosno blok naredbi, koji se
navode iza rezervisane rei else.
ematski prikaz koji opisuje ovakvu vrstu grananja prikazan je na slici:

da

Uslov

Komanda 1

ne

Komanda 2

Slika ### ematski prikaz dvostrukog grananja

Pascal kod koji bi odgovarao dvostrukom grananju bi bio:


iflogiki_izrazthennaredba_1
elsenaredba_2;

ili
iflogiki_izrazthen
begin
naredba_11;
naredba_12;
...
naredba_1n;
end
else
begin
naredba_21;
naredba_22;

Osnovi programiranja

dr Boban Stojanovi

...
naredba_2m;
end;

Primer
Napisati program koji za x dato na ulazu izraunava vrednost funkcija f(x) i g(x) koje imaju oblik:

1, ako je x < 0

f ( x) =
2 x + 3, ako je x 0

ln ( x ) , ako je x < 0
g ( x) =
e x , ako je x 0

programFunkcije;
var x,f,g:real;
begin
writeln('Unesitex:');
readln(x);

ifx<0then
begin
f:=1.0;
g:=ln(x);
end
else
begin
f:=2.0*x+3.0;
g:=exp(x);
end;

writeln('f(x)=',f);
writeln('g(x)=',g);
end.

Viestruko grananje
Imajui u vidu da se unutar if-then-else konstrukcije mogu nai bilo koja naredba ili blok naredbi,
zakljuujemo da to mogu biti i druge if naredbe. Korienjem takvih konstrukcija moemo ostvariti
viestruko grananje, kao to je to prikazano na slici:

Slika ### ematski prikaz viestrukog grananja

U ovom sluaju program prvo ispituje da li je prvi uslov ispunjen. Ukoliko Uslov 1 nije ispunjen, program
izvrava Komandu 3. Meutim, ako je Uslov 1 ispunjen, program ispituje Uslov 2 i u zavisnosti od toga da li je
3

Osnovi programiranja

dr Boban Stojanovi

on ispunjen ili nije, program izvrava Komandu 1 ili Komandu 2. Na ovaj nain dobili smo algoritamsku
strukturu sa trostrukim grananjem, koja moe izvravati neku od tri zadate komande u zavisnosti od
ispunjenosti pojedinih uslova. Na slian nain, kombinacijom if i else naredbi, moemo dobiti proizvoljan
broj uslovnih grananja.
Primer
Napisati program koji na osnovu broja bodova osvojenih na ispitu, odreuje ocenu prema sledeoj tabeli:
Broj bodova Ocena
55-64
6
65-74
7
75-84
8
85-94
9
95-100
10

programOcene;
var bodovi,ocena:integer;
begin
writeln('Unesitebrojbodova:');
readln(bodovi);

ifbodovi>=95thenocena:=10
else
ifbodovi>=85thenocena:=9
else
ifbodovi>=75thenocena:=8
else
ifbodovi>=65thenocena:=7
else
ifbodovi>=55thenocena:=6
elseocena:=5;

writeln('Studentjedobioocenu',ocena);
end.

Naredba viestrukog grananja CASE


Iako se viestruko grananje moe ostvariti korienjem naredbe if, program pisan na takav nain je esto
veoma nepregledan. Da bi se to izbeglo, u programskom jeziku Pascal postoji naredba viestrukog
grananja case, koja omoguava grananje programa u zavisnosti od vrednosti nekog izraza, kao to je to
prikazano na slici:

Izraz
Konstanta 1

Komanda 1

Konstanta 2

Komanda 2

Konstanta n

Komanda n

Slika ### ematski prikaz viestrukog grananja pomou naredbe case

Osnovi programiranja

dr Boban Stojanovi

Iza naredbe case navodi se izraz koji moe biti bilo kog nabrojivog tipa (char, boolean, integer, skup ili
intervalni tip). Nakon izraza sledi rezervisana re of iza koje se nabrajaju mogue vrednosti izraza i
odgovarajue naredbe ili blokovi naredbi.
Sintaksa
case<izraz>of
<konstanta_1:naredba_1;>
[konstanta_2:naredba_2;]
...
[konstanta_n:naredba_n;]
end;

Napomenimo da umesto jedne konstante moe biti navedena i lista vie konstanti odvojenih zarezom. U
tom sluaju naredba se izvrava ukoliko je navedeni izraz jednak bilo kojoj od nabrojanih konstanti.
Case naredba funkcionie tako to se prvo izraunava vrednost izraza, a zatim trai konstanta koja je
jednaka vrednosti izraza. Ukoliko takva konstanta postoji, izvrava se naredba navedena iza konstante. Ako
takve konstante nema, onda se ili nastavlja izvravanje programa zanemarujui naredbu case ili program
prijavljuje greku, u zavisnosti od vrste kompajlera. Turbo Pascal omoguava korienje rezervisane rei
else unutar naredbe case iza koje se navodi naredba koja e se izvriti u sluaju da vrednost izraza nije
jednaka ni jednoj od navedenih konstanti.
Primer 1
Napisati program koji na osnovu ocene od 1 do 5, odreuje opisnu ocenu koja moe biti "nedovoljan",
"dovoljan", "dobar", "vrlo dobar" ili "odlian".
programOcene;
var ocena:integer;
begin
writeln('Unesiteocenu:');
readln(ocena);

write('Ucenikje');
caseocenaof
1:writeln('nedovoljan');
2:writeln('dovoljan');
3:writeln('dobar');
4:writeln('vrlodobar');
5:writeln('odlican');
end;
end.

Primer 2
Napisati program koji odreuje broj dana u zadatom mesecu.
programDani;
var mesec:integer;
prestupna:char;
begin
writeln('Unesiterednibrojmeseca:');
readln(mesec);

casemesecof
1,3,5,7,8,10,12:writeln('Mesecima31dan.');
4,6,9,11:writeln('Mesecima30dana.');
2:
begin
write('Dalijegodinaprestupna(D/N)?');

Osnovi programiranja

dr Boban Stojanovi

readln(prestupna);
if(prestupna='D')or(prestupna='d')then
writeln('Mesecima29dana.')
else
writeln('Mesecima28dana.')
end;
elsewriteln('Pogresanbrojmeseca.');
end;
end.

NAPOMENA: Prethodni primer nee raditi na kompajlerima koji ne podravaju rezervisanu re else unutar
naredbe case.

You might also like