$$ \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.

Dodatna uputstva funkciji

Pomenuli smo da postoji nekoliko načina pisanja funkcija u Pajtonu, a da su funkcije koje smo do sada pisali i koristili najprostijeg oblika. Takve su na primer funkcije napred(), levo(), desno() , uzmi() i ostavi() iz biblioteke Karel, kao i funkcije nazad(), uzmi_na_susednom_polju() i na_neprazno_susedno_polje(), koje smo sami pisali. Sve ove funkcije obavljaju neki konkretan posao, uvek na isti način.

Funkcije mogu da se pišu i tako da u različitim izvršavanjima ne rade uvek sasvim istu stvar, nego da obavljaju malo opštiji zadatak. Za takve funkcije mi pri njihovom pozivanju preciznije navodimo kako tačno želimo da se zadatak obavi. Na primer, često bi mogla da nam bude korisna funkcija koja bi pomerila Karela za neki broj polja napred ili nazad. Za tu funkciju želimo da pri njenom pozivanju preciziramo zahtev - za koliko polja Karel treba da se pomeri i na koju stranu.

Funkcije sa parametrima

Dodatne informacije koje dajemo funkciji pišu se između zagrada posle imena funkcije, u prvom redu njene definicije. Između zagrada možemo da navedemo jednu vrednost, ili više vrednosti razdvojenih zarezima. Te vrednosti se nazivaju argumenti funkcije, ili parametri funkcije. Reči „argumenti” i „parametri” su u programiranju sinonimi i koristićemo ih ravnopravno.

Funkcija koja pomera Karela za zadati broj polja napred ili nazad, mogla bi da se zove idi i da ima jedan parametar, čija vrednost je ceo broj. Ako je taj parametar pozitivan, Karel bi se pomerio toliko polja napred, a ako je negativan, Karel bi išao odgovarajući (suprotan) broj polja nazad. Na primer, poziv idi(5) bi značio „idi 5 polja napred”, dok bi idi(-2) značio „idi 2 polja nazad”. Evo kako možemo da napišemo takvu funkciju:

Ova funkcija može da pojednostavi mnoge programe u kojima Karel treba da više puta ide duž jednog hodnika na jednu i drugu stranu. Sledi primer.

Obavi zadata premeštanja

Karel se nalazi na početnom polju hodnika dovoljne dužine, a treba da obavi sledeća premeštanja loptica:

  • 3 loptice sa polja 3 na polje 4

  • 4 loptice sa polja 5 na polje 1

Pri rešavanju ovog zadatka koristićemo opisanu funkciju idi. Da bismo dodatno pojednostavili program, možemo da uvedemo i funkciju premesti, koja premešta zadati broj loptica za zadati broj polja napred ili nazad. Iz ovog opisa se vidi da funkcija premesti treba da ima dva argumenta.

Da bi bilo jasnije čemu služi koji argument, daćemo im imena koja opisuju njihovu ulogu:

Funkcija premesti koristi pri svom izvršavanju ranije napisanu funkciju idi. Ovakvi pozivi funkcije iz druge funkcije mogu ići u dubinu koliko god nam je potrebno. Važno je jedino da da svaka funkcija bude definisana pre nego što je pozovemo na izvršenje.

Sada, kada imamo na raspolaganju ove dve funkcije, rešavanje polaznog zadatka je vrlo lako:

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_functions__displace_balls)

Zadaci za vežbu

Uzmi zadati broj loptica

Napisati funkciju uzmi_do(n), kojom Karel sa polja na kome se nalazi uzima najviše n loptica. Preciznije, ako je na polju n ili više loptica, Karel ih uzima n, a ako ima manje loptica, Karel uzima onoliko loptica koliko ih ima.

Potrebno je da Karel, koji se nalazi na prvom polju, uzme sa drugog polja do 4 loptice, sa trećeg do 2, a sa četvrtog do 3 loptice, a zatim da sve prikupljene loptice donese na prvo polje. Naravno, za to treba koristiti funkciju uzmi_do(n), napisanu u prvom delu zadatka.

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_functions__take_balls_up_to)

Vožnja po uputstvima

Date su funkcije na_raskrsnici_nalevo() i skreni_levo(n).

  • Funkcija na_raskrsnici_nalevo() postavlja Karela da gleda u prvu ulicu sa leve strane na koju naiđe. Pri izvršavanju ove funkcije, Karel ide napred dok ne dođe do polja na kome može da ide levo, i ostaje na tom polju okrenut na levo. Ako pre poziva funkcije sa Karelove leve srane postoji polje, on se tokom rada ove funkcije neće ni pomerati sa svog polja, nego će se samo okrenuti na levo;

  • Funkcija skreni_levo(n) uvodi Karela jedno polje u n-tu ulicu sa leve strane. Ako je Karel već u raskrsnici, ulica levo od njega se broji kao prva;

Napisati funkcije na_raskrsnici_nadesno() i skreni_desno(n) po ugledu na date.

Napisati program koji (pomoću datih i napisanih funkcija) vodi Karela u treću ulicu levo, zatim drugu desno, i na kraju drugu levo. Karel treba da dođe do kraja te ulice i da uzme jedinu lopticu na tabeli.

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_functions__travel_instructions_1)