2.2 Гранање¶
Покупи лоптицу ако је има¶

Наредни лавиринт је зачаран. Сваки пут када се робот покрене, лоптице на три поља испред њега се наместе другачије. Напиши програм којим робот купи све лоптице.
Робот треба три пута да се помери напред и да са сваког поља на које
дође покупи лоптицу (ако на пољу има лоптица). Међутим, пре него што
покупи лоптицу, он мора да провери да ли на том пољу уопште постоји
лоптица. Провера услова у програмском језику Пајтон (а и у многим
другим програмским језицима) врши се наредбом if
, што на енглеском
језику значи „ако“.
Подсетимо се, помоћу услова ima_loptica_na_polju
испитујемо да ли
на пољу има лоптица. Претходним кодом смо роботу рекли: „Ако на пољу
на ком стојиш има лоптица, онда узми лоптицу“, чиме постижемо да
Карел провери да ли на пољу има лоптица и да, ако их има, узме једну
лоптицу. Приметићеш да је, слично као и код петљи, након услова
наведена двотачка, а да је наредба која се извршава ако је услов
испуњен мало увучена. То је обавезно и, ако то не испоштујеш, добићеш
поруку о грешци, веома сличну као и код петљи.
У зависности од тога да ли је услов који проверавамо испуњен, ток
програма се грана, па се наредба if
назива и наредба
гранања. Гранањем и наредбом if
ћемо се много детаљније бавити
на неком од наредних часова (ван контекста програма за робота Карела).
Дакле, да бисте решили задатак, комбиноваћете померање робота и наредбу гранања којом ћете проверавати да ли на пољу постоји лоптица пре него што је робот покупи.
(Карел_покупи_лоптицу_ако_је_има)
Приметићеш да се у претходном програму наредбе
понављају три пута и можеш употребити петљу for
да добијеш
једноставнији програм.
(Карел_покупи_лоптицу_ако_је_има_for)

И наредни лавиринт је зачаран и његова дужина се мења сваки пут када се робот покрене, при чему се лоптице на пољима поново непредвидиво размештају. Напиши програм којим робот у оваквом лавиринту купи све лоптице.
Пошто у овом случају робот не зна колико пута треба да се помери
напред, употребићемо петљу while
и померати робота напред докле
год је то могуће.
(Карел_покупи_лоптицу_ако_је_има_while)
Узимање и остављање лоптица¶

Карел не зна где се налазе лоптице. Задатак му је да пређе три поља испред себе и притом узме лоптице са оних поља на којима се налазе а да их постави на она поља на којима се не налазе. У овом задатку Карел има неограничен број лоптица код себе тако да може да остави лоптицу када год је то потребно.
У ранијим програмима сте видели како робот може да иде три поља напред
и да узима лоптице на које наиђе. Потребно је да тај програм проширите
тако да робот оставља лоптице на празна поља. Најлакши начин да се то
уради је да кажете следеће: „Ако је на пољу лоптица, онда је узми, а у
супротном је остави.“ То се може остварити помоћу допуне наредби if
помоћу речи else
, која значи „у супротном“, тј. иначе.
(Карел_узми_и_остави_лоптице)
Дакле, уколико желимо да робот изврши неке наредбе ако је неки услов
испуњен, а неке друге ако тај услов није испуњен, користимо наредбу
if-else
. Иза речи if
наводи се услов, затим двотачка и потом
наредбе које ће се извршити ако услов јесте испуњен. Након тога се
наводи реч else
поравната са речју if
, затим се ставља
двотачка, а наредбе које се извршавају ако услов наведен иза if
није испуњен се такође увлаче.
Кретање укруг¶
Покушај да решиш и наредни, мало тежи задатак.

Напиши програм којим се роботу наређује да се креће укруг око лавиринта и да покупи све лоптице на које наиђе.
Једна идеја за решење је да четири пута поновимо наредбе којима робот иде напред докле год може и купи све лоптице на које наиђе.
(Карел_покупи_лоптице_у_круг_1)
Још једна идеја за решење може биће следећа. Ако робот може да се помери напред, онда ћемо му рећи да се помери напред и након тога ћемо му рећи да провери да ли се на пољу налази лоптица и да је узме. У супротном, ако робот не може да се помери напред, значи да је дошао до зида и тада ћемо му рећи да се окрене налево. Све ово ћемо понављати у једној петљи (која ће се извршити 20 пута, што је тачно број корака који је потребан да би робот обишао цео круг). Покушај да наредни код допуниш тако да робот успешно покупи све лоптице.
(Карел_покупи_лоптице_у_круг_2)