Naredbe grananja¶
U lekcijama o Karelu smo redovno proveravali na primer da li robot može da ide napred. Ove provere su nam bile portebne, jer ukoliko bismo pokušali da pomerimo robota napred kada polje ispred njega ne postoji, program bi prijavio grešku i prekinuo rad. Isto tako, trebalo je pre uzimanja loptice provravati da li postoji loptica na polju, a pre ostavnjanja loptica provreavati da il Karel ima loptica kod sebe.
Slično tome, u programima u kojima računamo često nam je potrebno da poredimo dve vrednosti, to jest da ustanovimo da li su one jednake, da li je jedna manja od druge, različita od druge i slično. U zavisnosti od ishoda poređenja, program može da nastavi sa izvršavanjem na različite načine.
Neki od simbola koji se koriste za poređenje su isti kao u matematici (na primer <
i >
), a neki nisu. U sledećoj tabeli su zato date oznake svih standardnih poređenja koje se koriste u matematici i u programskom jeziku Pajton (kao i u mnogim drugim programskim jezicima).
Matematika |
Pajton |
Značenje |
---|---|---|
\(a < b\) |
a < b |
a je manje od b |
\(a \leq b\) |
a <= b |
a je manje ili jednako b |
\(a > b\) |
a > b |
a je veće od b |
\(a \geq b\) |
a >= b |
a je veće ili jednako b |
\(a = b\) |
a == b |
a je jednako b |
\(a \neq b\) |
a != b |
a nije jednako b |
Zapis \(a < b\) možemo da shvatimo kao izraz čija je vrednost u svakom konkretnom slučaju „tačno” ili „netačno”. Ove vrednosti se u Pajtonu pišu redom kao True i False i to su logičke konstante, odnosno konstante tipa bool
koji zovemo logički tip. Izraze čija je vrednost tipa bool (logičkog tipa) zovemo logički izrazi. Svi izrazi u gornjoj tabeli su logički izrazi (kasnije ćemo videti i drugačije logičke izraze).
Naredba if¶
Naredbu if smo već upoznali u lekcijama o Karelu, podsetimo se:
Naredba if služi za donošenje odluke koja grupa od dve grupe naredbi treba da se izvrši. Na pajtonu se ona piše ovako:
Značenje (semantika) naredbe if:
Naredba napisana gore znači: ako je uslov ispunjen, izvrši naredbe naredba_a1, … naredba_ak, a ako nije ispunjen, onda izvrši naredbe naredba_b1, … naredba_bm.
Pravila pisanja (sintaksa) naredbe if
Posle reči
if
se piše logički izraz i na kraju reda obavezno znak:
(dvotačka).U sledećim redovima, uvučeno za isti broj razmaka (uobičajeno je 4), pišu se naredbe koje treba da budu izvršene ako logički izraz ima vrednost True. Ovih naredbi može biti jedna ili više.
Nakon naredbi koje se izvršavaju ako je uslov ispunjen piše se reč
else
i ponovo znak:
(dvotačka). Reč else je jednako uvučena kao i reč if.U sledećim redovima, ponovo uvučeno za isti broj razmaka, pišu se naredbe koje treba da budu izvršene ako logički izraz ima vrednost False. I ovih naredbi može biti jedna ili više.
Naredba if
se zove i naredba grananja zato što se tok izvršavanja programa kod ove naredbe grana: sledeća naredba koja će se izvršiti zavisi od vrednosti logičkog izraza u uslovu. Grupe naredbi posle reči if, odnosno else ze zato nazivaju i granama if naredbe.
U slučaju da program ne treba da uradi ništa kada uslov if naredbe nije ispunjen, to jest kada nam druga grana naredbe if nije potrebna, možemo da je izostavimo:
Ovakav, skraćeni oblik if naredbe ćemo koristiti kasnije.
Naredba if - primeri i zadaci¶
Primer - ko je mlađi:
Petar i Miloš treba da odigraju partiju bilijara. Dogovorili su se da prvi igra onaj ko je mlađi. Napisati program koji učitava broj godina Petra i Miloša (koji nisu jednaki) i ispisuje ko će izvesti prvi potez.
Primer - pakovanje:
Jaja se na farmi pakuju u kutije od po 10 komada i pune kutije se šalju u prodavnicu. Napisati program koji učitava broj jaja spremnih za pakovanje, a ispisuje da li sva jaja mogu da se spakuju i pošalju u prodavnicu, ili će nekoliko jaja privremeno ostati neupakovano.
Ovde treba proveriti da li je broj jaja deljiv sa 10. Radi toga koristimo operator % koji daje ostatak pri deljenju. Ako je ostatak pri deljenju broja jaja sa 10 jednak nuli, sva jaja mogu da se pošalju.
Zadatak - Strana ulice:
Parni brojevi se nalaze sa desne strane ulice, a neparni sa leve. Napisati program koji učitava traženi broj i ispisuje sa koje strane ulice se nalazi taj broj.
Ovde treba proveriti da li je traženi broj deljiv sa 2. Zadatak je sličan prethodnom - ako je ostatak pri deljenju traženog broja sa 2 jednak nuli, broj je sa desne strane, inače je sa leve strane.
Zadatak - bioskop:
Imate kod sebe 700 dinara. Napišite program koji učitava cenu bioskopske karte i cenu kokica, a zatim ispisuje da li imate dovoljno novca za kartu i kokice.
Složeni uslovi¶
U nekim zadacima je potrebno da iskažemo uslove koji su složeniji od prostog poređenja dve vrednosti. Za povezivanje jednostavnijih uslova se koriste reči i, ili i ne, a u Pajtonu se za to koriste upravo iste te reči na engleskom: and, or, not. Pri tome, ako su a i b neki uslovi, tada:
uslov a and b će biti ispunjen ako su oba uslova a i b ispunjena;
uslov a or b će biti ispunjen ako je bar jedan od uslova a i b ispunjen;
uslov not a će biti ispunjen ako uslov a nije ispunjen (što smo već pominjali i u poglavljima o Karelu);
Ovi uslovi se mogu dalje kombinovati u još složenije, prema potrebama zadatka. U složenim uslovima možemo da koristimo zagrade da bismo uticali na redosled računanja uslova (ili ako nismo sigurni koji je podrazumevani redosled), a i da bi program bio jasniji drugim ljudima koji ga čitaju. Ako u složenom uslovu nema zagrada, prvo se primenjuje not, zatim and, i na kraju or.
Složeni uslovi - primeri¶
Primer - prestupna godina:
Napisati program koji odgovara da li je zadata godina (između 1800-te i 2200-te, uključujući granice) prestupna ili prosta.
Po gregorijanskom kalendaru, za određivanje da li je godina prosta ili prestupna, koriste se sledeća pravila:
godine koje nisu deljive sa 4 (npr. 1923, 1070, 2017) su proste;
godine koje su deljive sa 100 a nisu sa 400 (npr. 1700, 1800, 1900, 2100, 2200) su takođe proste;
sve ostale godine (npr. 1984, 2000, 2012) su prestupne. To su godine koje su deljive sa 4 a nisu sa 100, ili su deljive sa 400.
Zapisujući data pravila u obliku logičkog uslova, dobijamo:
Ravnopravno rešenje dobijamo ako iskoristimo opis za prestupne godine, dat u trećem pravilu (uverite se razmišljanjem i isprobavanjem oba programa da se dobija isti rezultat):
Primer - radno vreme:
Radno vreme jedne prodavnice suvenira je od 7 do 11 ujutro i od 17 do 22 uveče (smatrati da tačno u 7:00 i u 17:00 radi, a u 11:00 i u 22:00 ne radi). Petar je naišao na prodavnicu u H časova i M minuta. Napisati program koji učitava broj H (od 0 do 23) i odgovara da li je Petar naišao u toku radnog vremena prodavnice.
Do rešenja možemo dođi i postupnim računanjem logočkih vrednosti, koristeći logičke promenljive:
U ovom rešenju samo h je celobrojna promenljiva, a sve ostale (u_radno_vr_ujutro, u_radno_vr_uvece, u_radno_vr) su logičke, što znači da će tokom izvršavanja programa dobiti vrednosti True ili False.
Složeni uslovi - pitanja¶
-
Q-24: Uparite ravnopravne uslove
Pokušajte ponovo!
- a <= b
- a < b or a == b
- a >= b
- b <= a
- not (a == b)
- a < b or a > b
- not (a != b)
- a == b
- h < 7 and 11 <= h
- Ne, taj uslov nije ispunjen ni za jedno h.
- h < 7 or 11 <= h
- Tačno
- not(7 <= h) or not(h < 11)
- Tačno
- h <= 7 or 11 < h
- Ne, vrednost uslova se razlikuje u slučaju da je h jednako baš 7 ili 11.
Q-25: Koji sve uslovi su ravnopravni sa not(7 <= h and h < 11) ?
-
Q-26: Uparite uslove i opise
Pokušajte ponovo!
- Bar jedan od a, b, c je pozitivan
- a > 0 or b > 0 or c > 0
- Ni jedan od a, b, c nije pozitivan
- a <= 0 and b <= 0 and c <= 0
- a, b, c nisu svi pozitivni
- a <= 0 or b <= 0 or c <= 0
- a, b, c su svi pozitivni
- a > 0 and b > 0 and c > 0
- (stanovnika <= 10000) or (stanovnika > 10000 and prihod <= 2000)
- Tačno
- stanovnika <= 10000 or prihod <= 2000
- Tačno
- stanovnika <= 10000 and prihod <= 2000
- Pogrešno
- (prihod <= 2000) or (prihod > 2000 and stanovnika <= 10000)
- Tačno
Q-27: Državna vlada nudi pomoć za izgradnju sportskog centra. Naseljena mesta do 10000 stanovnika mogu sva da konkurišu, a od mesta sa više od 10000 stanovnika, mogu da konkurišu ona u kojima je prosečan prihod do 2000. Koji od uslova ispravno proveravaju da li neko mesto može da konkuriše?
Složeni uslovi - zadaci¶
Zadatak - brojevi po redu:
Napisati program koji učitava cele brojeve a, b, c i odgovara na pitanje da li su ti brojevi dati po veličini od najmanjeg do najvećeg.
Zadatak - srednji broj:
Napisati program koji učitava cele brojeve a, b, c i odgovara na pitanje da li je b srednji po veličini od njih.
Zadatak - čuvanje psa:
Sa Anom i Markom živi još samo njihov pas Bobi. Njih dvoje imaju zakazana putovanja istog meseca, Ana od datuma a1 do a2, a Marko od m1 do m2. Oboje na put polaze ujutro, a vraćaju se uveče. Pošto ne žele da ostavljaju Bobija samog, interesuje ih da li im se putovanja preklapaju.
Napisati program koji učitava cele brojeve a1, a2, m1 i m2, i odgovara na pitanje da li se Anino i Markovo putovanje preklapaju.
Pomoć: putovanja se preklapaju ako Marko odlazi pre nego što se Ana vrati (dan Markovog odlaska je manji ili jednak danu Aninog povratka) ili obrnuto, ako Ana odlazi pre nego što se Marko vrati.