$$ \newcommand{\floor}[1]{\left\lfloor{#1}\right\rfloor} \newcommand{\ceil}[1]{\left\lceil{#1}\right\rceil} \renewcommand{\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{\mss}{\,\mathrm{\frac{m}{s^2}}} \newcommand{\mmin}{\,\mathrm{\frac{m}{min}}} \newcommand{\smin}{\,\mathrm{\frac{s}{min}}} $$

Prijavi problem


Obeleži sve kategorije koje odgovaraju problemu

Još detalja - opišite nam problem


Uspešno ste prijavili problem!
Status problema i sve dodatne informacije možete pratiti klikom na link.
Nažalost nismo trenutno u mogućnosti da obradimo vaš zahtev.
Molimo vas da pokušate kasnije.

Proverite pa odlučite

Naredba while se pokazala kao vrlo korisna, jer smo upotrebljavajući je mogli da rešavamo mnogo raznovrsnije zadatke. Ipak, sledeći primer pokazuje da postoje jednostavni zadaci koje sa ovim što do sada znamo i dalje ne možemo da rešimo.

Recimo da vam je u nekoj situaciji potrebno da pomerite Karela samo za jedno polje ako je moguće (ako nije moguće, Karel treba da ostane tamo gde je).

  • Ako napišemo samo naredbu napred(), rizikujemo poruku o grešci u slučaju da je Karel pred zidom.

  • Ako naredbu napred() smestimo ispod while moze_napred():, rizikujemo da odemo dalje nego što smo želeli.

  • Ako ne koristimo naredbu napred(), rizkujemo da se ne pomerimo ni onda kada je to moguće (i potrebno).

Očigledno, potrebna nam je neka nova naredba, koja će Karelu reći „ako možeš napred, pomeri se za jedno mesto”.

Naredba if

Naredba koja nam je potrebna u opisanom slučaju je naredba if, koja takođe postoji u skoro svim programskim jezicima. Na pajtonu se ona (u svom jednostavnijem obliku) piše ovako:

Vidimo da je pisanje if naredbe veoma slično pisanju while naredbe. Pod if naredbom se takođe može naći jedna ili više drugih naredbi, koje čine telo if naredbe. Pri tome važe ista pravila za pisanje dvotačke posle uslova i uvlačenje naredbi koje se izvršavaju ako je uslov ispunjen. Razlika je u tome što se naredbe u telu if naredbe neće ponavljati - ako je uslov ispunjen one će se izvršiti samo jedanput.

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 odgovora na pitanje iz uslova.

U pomenutom primeru, trebalo bi pisati:

Slede zadaci u kojima se (pored ranije upoznatih) koristi if naredba.

Uzmi jednu lopticu ako ih ima

Ispred Karela je jedno polje, na kome se nalazi nula ili više loptica. Napišite program na osnovu koga će Karel preći na to polje, a zatim uzeti tačno jednu lopticu ako na polju ima bar jedna loptica.

Pokrenite program više puta da biste ga testirali na različitim primerima.

U našem slučaju, uslov će biti ima_loptica_na_polju(), a naredba koja se uslovno izvršava je uzmi().

Please try loading this page in HTML5 enabled web browsers. All the latest versions of famous browsers such as Internet explorer, Chrome, Firefox, Opera support HTML5.

(Karel_if__take_one_if_any)

Idi do kraja i pokupi po jednu lopticu gde ih ima

Ispred Karela je bar jedno polje, a može ih biti bilo koliko. Na svakom polju ima nula ili više loptica. Karel treba da pokupi po tačno jednu lopticu sa svakog polja na kome ima loptica.

Pokrenite program više puta da biste ga testirali na različitim primerima.

Ovde je potrebno koristiti while naredbu za napredovanje, a posle svakog napredovanja u telu while petlje treba koristiti if naredbu za proveru da li Karel stoji na polju sa lopticom.

Please try loading this page in HTML5 enabled web browsers. All the latest versions of famous browsers such as Internet explorer, Chrome, Firefox, Opera support HTML5.

(Karel_if__many_squares_take_one_if_any)

Ako ne radiš to, uradi ovo (if-else)

U nekim zadacima treba uraditi jednu stvar ako je neki uslov ispunjen, a neku drugu stvar ako nije ispunjen. U tom slučaju možemo da koristimo prošireni oblik if naredbe, koji izgleda ovako:

U proširenom obliku if naredbe prvi deo (do reči else) ima isti izgled i značenje kao i do sada. U nastavku se piše reč else jednako uvučena kao i reč if, zatim se piše dvotačka, a ispod sledi jedna ili više drugih naredbi, koje čine telo else grane. Ova druga grupa naredbi se piše uvučeno u odnosu na reč else, a izvršava se ako uslov naveden u if naredbi nije ispunjen.

Primer - uzimanje i ostavljanje loptica

Ispred Karela su 3 polja, a na svakom od njih može da bude po jedna ili nijedna loptica. Karel treba da uzme loptice sa onih polja na kojima se nalaze i da ih postavi na ona polja na kojima se ne nalaze. Karel na početku ima dovoljno loptica kod sebe.

Pomoću novog, proširenog oblika if naredbe, Karelu možemo da kažemo: „Ako je na polju loptica, onda uzmi tu lopticu, inače ostavi jednu lopticu”, tako da se zadatak lako rešava:

Please try loading this page in HTML5 enabled web browsers. All the latest versions of famous browsers such as Internet explorer, Chrome, Firefox, Opera support HTML5.

(Karel_if__take_else_put)

Pokupi loptice do kojih možeš da dođeš

Lavirint se sastoji od dva reda. Karel se nalazi u gornjem redu, koji je prohodan do kraja. U donjem redu mogu da se nalaze prepreke ili polja sa po jednom lopticom. Karelov zadatak je da pokupi sve loptice.

Please try loading this page in HTML5 enabled web browsers. All the latest versions of famous browsers such as Internet explorer, Chrome, Firefox, Opera support HTML5.

(Karel_if__take_all_from_lower_row)

Radi samo kad nešto nije

Neka je potrebno da se Karel okrene levo ako ne može da ide napred (ako može da ide napred, ne treba da radi ništa).

Prema pravilima pisanja if naredbe, posle uslova (u telu prve grane) mora da postoji bar jedna naredba, a prema logici zadatka nam nije potrebna ni jedna naredba na tom mestu. U takvim situacijama možemo da pišemo:

ili

U prvom slučaju koristimo specijalnu naredbu pass koja ne radi ništa. Time je zadovoljena i sintaksa (pravila pisanja), a dobili smo i program koji radi kako želimo.

U drugom slučaju, pomoću reči not pravimo suprotan uslov, što znači da je uslov if naredbe ispunjen kada Karel ne može da ide napred. U ovom slučaju grane menjaju uloge i onda nam else grana više nije potrebna.

Sledi par sličnih zadataka, u kojima takođe treba nešto uraditi samo kada uslov nije ispunjen.

Okreni se ka praznom polju

Karel može da bude okrenut na bilo koju stranu, ali samo u jednom smeru može da započne kretanje. Potrebno je da se Karel okrene ka slobodnom polju i da napravi jedan korak.

Please try loading this page in HTML5 enabled web browsers. All the latest versions of famous browsers such as Internet explorer, Chrome, Firefox, Opera support HTML5.

(Karel_if__turn_to_free_square)

Nudimo vam dva kratka rešenja:

Dodaj loptice gde ih nema

Ispred Karela je nepoznat broj polja, a na svakom od njih može da bude po jedna ili ni jedna loptica. Karel ima dovoljno loptica kod sebe, a treba da stavi po jednu lopticu na svako polje na kome nema loptice.

Please try loading this page in HTML5 enabled web browsers. All the latest versions of famous browsers such as Internet explorer, Chrome, Firefox, Opera support HTML5.

(Karel_if__fill_the_empty_squares)