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

Još kraći programi

Podsetimo se poslednjeg programa prethodne lekcije. Trebalo je da Karel uzme po pet loptica sa svakog od tri naredna polja.

../_images/nested_for_3x5.png

Program koji rešava zadatak mogao je da izgleda ovako:

Vidimo da se u ovom programu sledeća grupa naredbi ponavlja tri puta:

To nam omogućava da dodatno skratimo program. Pri objašnjavanju for naredbe smo pomenuli da u telu petlje mogu da se nađu druge petlje. Sada imamo priliku da to iskoristimo.

Ugnežđene for naredbe

Kada se u telu jedne petlje nalazi druga petlja, onda prvu petlju zovemo spoljna petlja, a drugu unutrašnja. Zajedno ih zovemo ugnežđene ili umetnute petlje. U sledećem primeru ćemo videti kako se pišu ugnežđene for naredbe.

Pokupi tri puta po 5 loptica

Ispred Karela su tri polja, a na njima po 5 loptica. Karel treba da pokupi sve loptice.

Zadatak je ponovljen, ali sada ćemo ga rešiti na drugačiji način.

Ranije smo pomenuli da je sa i u dosadašnjim primerima for naredbe imenovano mesto na kome brojimo dokle smo stigli sa ponavljanjem. Sada prvi put treba da u toku brojanja jedne stvari (polja) prebrojimo drugu stvar (loptice). To znači da će na primer biti potrebno da znamo kada smo na trećem polju pri drugoj loptici. Zbog toga ne možemo da koristimo isto ime za oba brojača, pa smo umesto dosadašnjeg i uveli nova imena za brojače. U programu koji sledi brojač polja smo nazvali i_polje, a za brojač loptica i_loptica.

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

U datom rešenju naredba uzmi() je dodatno uvučena, jer se ona izvršava po jednom za svako i_loptica iz opsega [0, 1, 2, 3, 4]. Osim toga, cela naredba for i_loptica in range(5): se (uz naredbu napred(), zajedno sa svojim telom) ponavlja 3 puta, po jednom za svako i_polje iz opsega [0, 1, 2]. To znači da se naredba uzmi() izvršava ukupno 3 x 5 = 15 puta (na svakom od tri polja po pet puta).

Kod umetnutih petlji je potrebno dodatno paziti na pravilno uvlačenje naredbi, jer ono postaje nešto malo komplikovanije. Pogrešno uvlačenje pojedinih naredbi može da dovede do pogrešnog rezultata, ili do programa koji uopšte ne radi.

Zadaci za vežbu

Preskok

Ispred Karela je na svakom trećem polju po jedna loptica, a on treba da ih obe pokupi.

Karel treba da ponovi 2 puta grupu naredbi: „tri puta idi napred, a zatim uzmi 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_every_nth_square)

Na svakom trećem po 5

Ispred Karela je na svakom trećem polju po pet loptica, a on treba da ih sve pokupi.

Zadatak je sličan prethodnom, treba samo ponavljati uzimanje loptice. Pazite da petlja za uzimanje loptica bude ispod petlje za kretanje napred, a ne u njoj.

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

U krug

Karel ponovo treba da pokupi sve loptice.

Spoljna petlja treba da se izvrši 3 puta, a u njoj Karel treba da uradi sledeće:

  • Dva puta ponovi korake: „idi napred” i „uzmi lopticu”

  • Okreni se levo

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

Uputstvo smo još malo približili programu, probajte da ga pretvorite u naredbe. Ako ipak želite da vidite program, kliknite na dugme „Rešenje”.

U krug po 3 loptice

Napišite program pomoću koga će Karel da pokupi svih 18 loptica.

Razlika u odnosu na prethodni zadatak je u tome što sada uzimanje loptica treba da bude u dodatnoj petlji. To znači da ćemo imati tri ugnežđene petlje: jednu koja broji strane lavirinta, drugu koja broji polja duž jedne strane, i treću koja broji loptice na polju.

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

Ponovo dajemo uputstvo koje malo više liči na program (ovaj put bez rešenja).