Комбиновање петљи

Видели смо да у телу for наредбе може да се нађе више различитих наредби. Слично као са for наредбом, и у телу while наредбе може (поред осталих наредби) да се нађе и нова петља, било while или for. Тако можемо да градимо различите комбинације уметнутих (угнежђених) петљи.

Када су две петље уметнуте једна у другу, зовемо их и двострука петља, док три угнежђене петље зовемо трострука петља. На сличан начин можемо угнездити било који број петљи једну у другу, али за великим бројем угнежђених петљи врло ретко имамо потребу.

У овој лекцији ћемо вежбати писање комбинација угнежђених while и for петљи.

Разне двоструке и вишеструке петље - задаци

Узимај по четири лоптице до краја

Испред Карела је једно или више поља, а на сваком од поља испред Карела су по четири лоптице (на почетном пољу нема лоптица). Карел треба све да их покупи.

Сада Карел, све док не дође до зида, треба да понавља корак напред и узимање 4 лоптице. Покушајте да допуните програм.

Подсетимо се, као и у ранијим примерима угнежђених петљи, наредба у телу унутрашње петље (овде ће то бити наредба 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_while__many_squares_four_bals_per_square)

Покупи све лоптице

Испред Карела је бар једно поље, а може их бити било колико. На сваком од поља испред Карела има нула или више лоптица (почтено поље је празно). Карел треба да покупи све лоптице.

Овај задатак је уопштење претходног, па програм који решава овај задатак, може да се искористи и у претходном. Разлика је у томе што сада унутрашња петља мора да буде while, док је у претходном задатку могла да буде и for.

И у овом програму наредба uzmi() треба да буде додатно увучена. На тај начин ће се она понављати док је услов унутрашње while наредбе испуњен, то јест док има лоптица на пољу на коме је Карел у том тренутку, а узимање свих лоптица се заједно са наредбом napred понавља у спољашњој while наредби док има поља испред Карела. Укупни ефекат угнежђених петљи је да ће бити узете све лоптице са сваког поља.

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

Донеси све лоптице

Испред Карела је прав пут непознате дужине. Карел треба да прикупи све лоптице са свих поља и донесе их на почетно поље.

Програм је коментарима разложен на ситније целине. Додајте делове који недостају.

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

Горе-доле

Карел се налази на правоугаоној табли непознате величине (број колона је увек непаран), без лоптица. Циљ је да Карел стигне до доњег десног поља, а да би то постигао, мораће да се креће кроз колоне наизменично горе-доле.

Ово су неки од могућих изгледа лавиринта:

../_images/While_UpDown.jpg

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

Степенице

Карел треба да се попне уз прве степенице, а затим да сиђе низ друге и заврши у доњем десном углу. Величина табле није позната, али број колона ће увек бити непаран. Табла може да изгледа на пример овако:

../_images/While_Stairs.jpg

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

Спирала улево

Карел у свим приказаним случајевима треба да дође до поља означеног црвеним кругом (ни у овом задатку нема лоптица).

../_images/While_SpiralLeft.jpg

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