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

Skratite pisanje programa

U prethodnom poglavlju je bilo zadataka u kojima bi nam bilo zgodno da imamo skraćeni zapis za neke akcije koje se ponavljaju. Na primer, bilo je potrebno da Karel ide tri koraka napred. U slučaju samo tri koraka nije problem da napišemo naredbu napred() tri puta, međutim kada Karel treba da napravi dvanaest koraka napred, ako pišemo:

u takvom načinu pisanja lakše se pogreši, a nije ni dovoljno pregledno. Ako vam izgleda da ni dvanaest nije neki problem, pomislite da u svetu programiranja nije retko da se neka naredba ponavlja i po milion puta.

Naredba for

Bolji način zadavanja ovakvog kretanja bi bio da kažemo: „dvanaest puta idi napred”. Da bismo neku naredbu (ili grupu naredbi) ponovili određeni broj puta, koristimo naredbu for. Najčešće korišćeni oblik ove naredbe U Pajtonu izgleda ovako:

Kasnije ćemo se upoznati sa još nekim oblicima naredbe for.

Naš primer sa dvanaest ponavljanja jednog koraka napred se pomoću for naredbe može zapisati ovako:

Ovde dajemo i nešto detaljniji opis for naredbe. Ne morate ga potpuno razumeti u ovom trenutku, upotreba i pravila pisanja će postati jasniji uz primere koji slede. Kada budete želeli malo više detalja o naredbi for, možete se vratiti na ovo objašnjenje (mada ono ne opisuje druge oblike for naredbe).

Prema pravilima pisanja programa na Pajtonu, reči for i in, kao i dvotačka (znak :) na kraju reda, moraju se pojaviti u zapisu ove naredbe.

  • Slovo i je ovde ime za mesto na kome brojimo dokle smo stigli sa ponavljanjem, pa umesto i može da stoji i neko drugo ime (vratićemo se na ovo kad nam zatreba).

  • Zapis range(n) predstavlja opseg celih brojeva počevši od 0, a n govori koliko brojeva sadrži taj opseg. Na primer range(3) je opseg koji sadrži brojeve 0, 1, 2, a range(7) je opseg sa brojevima 0, 1, 2, 3, 4, 5, 6.

  • Naredbe u sledećim redovima čine takozvano telo for naredbe. To mogu biti bilo koje naredbe na Pajtonu, uključujući naredbe za kretanje Karela, druge naredbe for, ili neke naredbe koje još nismo pomenuli. Može ih biti jedna ili više.

Zapis for i in range(3) bi trebalo čitati: „za i u opsegu [0, 1, 2]”. To znači da će se naredbe u telu for naredbe izvršiti po jedanput za i=0, i=1, i=2, dakle ukupno tri puta. Mi u telu for naredbe za sada nećemo koristiti vrednost i, tako da nam je bitno samo koliko opseg ima vrednosti (broj iza range u zagradi), jer će se telo for naredbe toliko puta izvršiti.

Da bi bilo jasno koje naredbe čine telo for naredbe, te naredbe se pišu uvučeno (pomereno u desno), i to sve za isti broj razmaka. Možemo sami da odaberemo koliko razmaka koristimo za uvlačenje naredbi u telu for naredbe. Bilo bi dobro da to uvek bude isti broj, jer ćemo tako navići da određeni izgled programa i lakše ga čitati. Najčešće je to 4 razmaka, pa ćemo i mi uvlačiti telo for naredbe za četiri mesta.

Naredba for se često zove i naredba ponavljanja. Takođe je poznata i kao petlja (engl. loop), jer kretanjem u programu po naredbama koje izvršavamo, kad naiđemo na naredbu for kružimo određeni broj puta po naredbama u njenom telu, to jest pravimo petlju. Izrazi „petlja” ili „naredba ponavljanja” su manje precizni, jer kao što ćemo uskoro videti, naredba for nije jedina petlja, odnosno naredba ponavljanja. Reč „petlja” obično koristimo kada je jasno (ili nebitno) o kojoj naredbi govorimo, jer lakše je reći na primer „telo petlje”, nego „telo for naredbe”.

Zadaci za vežbu

Pomeri se petnaest polja napred i uzmi lopticu

Napiši program na osnovu kojega će se Karel pomeriti na polje (16, 1) i pokupiti lopticu.

U prostoru za rešavanje vas čeka duži (i ružniji) program. Pokušajte da ga zamenite for naredbom. U slučaju da vam rešenje sa for naredbom ne proradi (što se u početku često dešava), rešenje možete da vidite kada kliknete na dugme „Rešenje” ispod.

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

Idi jedno polje napred i pokupi 10 loptica

Ispred Karela je tačno jedno polje, a na njemu 14 loptica. Karel treba da ih pokupi tačno deset.

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

Uzimaj po jednu lopticu na narednih 8 polja

Ispred Karela je osam polja, a na svakom od njih po jedna loptica. Karel treba da pokupi sve loptice.

Primetite da sada u for petlji treba uraditi dve stvari: koraknuti napred i uzeti lopticu.

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

Pokupi po 5 loptica sa naredna tri polja

Ispred Karela su tri polja, a na svakom od njih po pet loptica. Karel treba 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_for_Take_5_5_5)