Гранање у програму¶
Вратимо се опет на одлазак у продавницу. Неке од корака можеш унапред да предвидиш, знаш да се неће променити. Као што смо већ рекли, неке од њих не можеш унапред да предвидиш.
Oсновни је ред да се јавиш ако сретнеш неког познатог на улици. Да ли можеш унапред да предвидиш колико ћеш другова, другарица, рођака или кућних пријатеља срести? Да ли би било довољно да ти родитељи кажу „Јави се пет пута“? Како би, у овом случају, гласило добро, исправно упутство?
„Ако сретнеш неког познатог, поздрави га“.
На раскрсници може да буде постављен семафор. Упутство би гласило:
„Ако је на семафору зелено светло за пешаке, пређи улицу. И у случају да је постављен семафор и да није – провери да ли наилази неко возило са леве или десне стране. Ако нема возила, пређи улицу.“
Слично је и кад састављаш програм.
Када се у програму проверава неки услов и раде различите ствари у зависности од тога да ли је он испуњен или не, говоримо о гранању.
Наредба ако¶
За сваки од претходних случајева било је потребно да јасно кажеш шта треба да се уради ако је испуњен неки услов.
У програму за овакве ситуације користиш блокове из групе Гранање
.
Превуци горњи блок у простор за слагање.
Ови блокови се комбинују са различитим условима.
Као што је код условних петљи већ поменуто, услови су изрази који могу бити тачни или нетачни.
Да би боље разумео како се користи гранање у програму, и овде смо убацили групу блокова Питај робота
.
Пример¶
Карел треба да стигне на поље (7, 1). Ако на путу наиђе на лопту, треба да је узме. Састави решење тако да важи и ако је другачији распоред лоптица.
Када би састављао блокове корак по корак, изгубио би много времена. Замисли да је испред Карела стотинак лоптица различито распоређених. Универзално упутство било би следеће:
„Направи корак. Ако се на пољу налази лоптица, узми је.“
Превуци горњи блок из групе Гранање
, а затим блок постоји лоптица
из групе Питај робота
. Ако постоји лоптица, Карел треба да је узме.
Додај блок узми
из групе Наредбе роботу
(повежи га поред речи изврши
).
Пре тога, да би ишао даље, Карел треба да направи корак напред. Повежи и овај блок изнад блока са гранањем.
Колико пута Карел треба ово да понови?
У овом случају можемо да избројимо да је то шест пута. Из групе Петље
превуци блок за бројачку петљу, укуцај број 6 уместо 10
и претходно састављене блокове превуци у простор планиран за наредбе, поред речи изврши
(како би истовремено превукао све блокове који су повезани,
миша држи на горњем блоку). Покрени програм!
Шта да радимо ако не знамо колика је дужина пута којим се Карел креће? Наше решење је састављено применом бројачке петље. Сигурно је још универзалније ако кажеш „док Карел може напред“.
Измени решење и тестирај тако састављен програм!
Задатак 17¶
Мирко је покушао да реши претходни пример тако што ће да примени условну петљу. Међутим, програм му стално одговара да је решење нетачно. Пронађи грешку!
Помоћ: Провери редослед извршавања корака и, по потреби, измени!
Наредба ако-иначе¶
Када је реч о гранању, постоје два различита случаја:
Први је када треба само да кажеш шта да се уради ако је испуњен неки услов (поздрављање ако сретнеш неког познатог).
Други случај је када је потребно да објасниш и шта треба да се уради ако није испуњен услов, „иначе”.
Ако је црвено светло на семафору, не треба да направиш ниједан даљи корак. Али, ако у продавници нема кифли, потребно је да знаш шта треба да урадиш уместо тога. На пример, да ли да купиш погачице, одеш у другу радњу или да само изађеш из радње и вратиш се кући.
Први блок у групи гранање предвиђен је за случај да није потребно ништа да се уради ако није испуњен услов (иако и овај блок може да се прошири кликом на зупчаник у његовом горњем левом углу)
Блок испод њега користиш када (у случају да није испуњен услов) треба да се изврши и нека друга наредба, односно неки други корак.
Пример¶
Испред Карела се налазе рупе и лопте. Ако стане на поље на ком се налази лопта, треба да је узме. Иначе, треба да је остави у рупу.
Превуци доњи блок из групе Гранање
у простор за слагање блокова и погледај како изгледа. Осим ако
и изврши
, појавило се и иначе
.
Поред ове речи повезујеш блок или групу блокова са наредбама које треба да се изврше ако услов није испуњен.
У овом примеру: Карел направи корак напред. Ако на пољу постоји лоптица - треба да је узме, иначе - остави.
Овај блок треба да се понавља све док робот може да иде напред. Из групе Петље
превуци одговарајући блок и убаци блок који је претходно састављен.
Задатак 18¶
Карел не зна колико има лопти код себе. Јана je саставила мало сложенији програм. Шта је Јана рекла Карелу да треба да уради? Колико ће лоптица Карел имати код себе када изврши овај задатак?
Покушај да одговориш пратећи корак по корак, односно блок по блок који је Јана поставила.
Већ се назире да постоје два различита случаја. Шта ће Карел да уради у првом, а шта у другом? До када ће све то да ради? Објасни својим речима!
Покушај да се крећеш по датим инструкцијама, да правиш исте кораке као Карел! У крајњем случају, покрени Јанин програм и одговори на питање!
(сваки пут кад покренеш програм, Карел ће имати код себе различит број лопти, али ће на крају увек имати исти)
До сада су програми које си састављао били једноставни и нису се састојали из великог броја блокова. Током времена постаће сложенији.
И у овом окружењу постоји могућност да вратиш корак уназад ако случајно нешто погрешиш.
Када кликнеш десним тастером миша било где на простор за слагање блокова добићеш следеће опције:
Опозови
служи да се вратиш један корак уназадПонови
ће се појавити када се вратиш бар један корак уназад, моћи ћеш тада да идеш и корак унапредСкупи блокове
се користи када имаш пуно блокова, па хоћеш да се неки не виде, да програм буде прегледнијиОбриши блокове
служи да избришеш све блокове одједном.