2.3. Гранање¶
Покупи лоптицу ако је има¶
![](../_static/img/question-mark.png)
Помози роботу да покупи лоптицу на пољу, ако је има.
Подсетимо се, помоћу услова ima_loptica_na_polju
испитујемо да ли
на пољу има лоптица.
Провера услова у програмском језику Python (а и у многим
другим програмским језицима) врши се наредбом if
, што на енглеском
језику значи ако.
Претходним кодом смо роботу рекли: „Ако на пољу на ком стојиш има лоптица, онда узми лоптицу“, чиме постижемо да Карел провери да ли на пољу има лоптица и да, ако их има, узме једну лоптицу. Приметићеш да је, слично као и код петљи, након услова наведена двотачка, а да је наредба која се извршава ако је услов испуњен мало увучена. То је обавезно и, ако то не испоштујеш, добићеш поруку о грешци, веома сличну као и код петљи.
У зависности од тога да ли је услов који проверавамо испуњен, ток
програма се грана, па се наредба if
назива и наредба гранања.
Гранањем и наредбом if
ћемо се много детаљније бавити
на неком од наредних часова (ван контекста програма за робота Карела).
![](../_static/img/question-mark.png)
Наредни лавиринт је зачаран. Сваки пут када се робот покрене, лоптице на три поља испред њега се наместе другачије. Напиши програм којим робот купи све лоптице.
Да бисте решили задатак, комбиноваћете померање робота и наредбу гранања којом ћете проверавати да ли на пољу постоји лоптица пре него што је робот покупи. Робот треба три пута да се помери напред и да са сваког поља на које дође покупи лоптицу (ако на пољу има лоптица). Међутим, пре него што покупи лоптицу, он мора да провери да ли на том пољу уопште постоји лоптица.
(Карел_покупи_лоптицу_ако_је_има)
Приметићеш да се у претходном програму наредбе
понављају три пута и можеш употребити петљу for
да добијеш једноставнији програм.
(Карел_покупи_лоптицу_ако_је_има_for)
Погледај наредну видео-илустрацију како би био сигуран да си разумео претходни пример:
![](../_static/img/question-mark.png)
И наредни лавиринт је зачаран и његова дужина се мења сваки пут када се робот покрене, при чему се лоптице на пољима поново непредвидиво размештају. Напиши програм којим робот у оваквом лавиринту купи све лоптице.
Пошто у овом случају робот не зна колико пута треба да се помери
напред, употребићемо петљу while
и померати робота напред докле год је то могуће.
(Карел_покупи_лоптицу_ако_је_има_while)
Узимање и остављање лоптица¶
![](../_static/img/question-mark.png)
Карел не зна где се налазе лоптице. Задатак му је да пређе три поља испред себе и притом узме лоптице са оних поља на којима се налазе а да их постави на она поља на којима се не налазе. У овом задатку Карел има неограничен број лоптица код себе тако да може да остави лоптицу када год је то потребно.
У ранијим програмима сте видели како робот може да иде три поља напред
и да узима лоптице на које наиђе. Потребно је да тај програм проширите
тако да робот оставља лоптице на празна поља. Најлакши начин да се то
уради је да кажете следеће: „Ако је на пољу лоптица, онда је узми, а у
супротном је остави.“ То се може остварити помоћу допуне наредби if
помоћу речи else
, која значи „у супротном“, тј. иначе.
(Карел_узми_и_остави_лоптице)
Дакле, уколико желимо да робот изврши неке наредбе ако је неки услов
испуњен, а неке друге ако тај услов није испуњен, користимо наредбу
if-else
. Иза речи if
наводи се услов, затим двотачка и потом наредбе које
ће се извршити ако услов јесте испуњен. Након тога се наводи
реч else
поравната са речју if
, затим се ставља двотачка, а наредбе које
се извршавају ако услов наведен иза if
није испуњен се такође увлаче.
Утврдимо потпуни облик if
наредбе: