Одмакни


Управљање Карелом

Да бисте видели како програмирање изгледа, упознаћемо вас са Карелом. Карел је анимирани робот, који се креће по табели налик лавиринту тако што прати наша упутства у облику програма. Кроз управљање Карелом усвојићемо логику која је веома битна за писање било каквих програма, а можемо се успут и забавити.

Идеја о учењу програмирања кроз управљање роботом потиче још из седамдесетих година 20-тог века, када је Ричард Патис (Richard E. Pattis) као постдипломац на универзитету Стенфорд направио прво такво окружење и осмислио специјалан језик за ту сврху. Језик је, као и робот, назван Карел, по Карелу Чапеку, чешком писцу који је први почео да користи реч робот. Патисова књига Робот Карел: лаки увод у уметност програмирања (Karel The Robot: A Gentle Introduction to the Art of Programming) је објављена 1981. године и брзо је постала најбоље продавана уводна књига у програмерске курсеве.

За управљање Карелом можемо користити ове функције:

Ових пет функција користимо као команде упућене Карелу. Карел разуме још пет нешто друкчијих функција, које ћемо видети ускоро. Поред ових команди упућених директно Карелу, можемо да користимо и све наредбе програмског језика Пајтон, који ћемо успут упознавати.

Погледајмо кроз примере како горе наведене наредбе можемо да користимо да бисмо водили Карела кроз његов свет:

Примери

Помери се једно поље напред и узми лоптицу

Напишите програм на основу којега ће се Карел померити на поље (2, 1) и покупити лоптицу.

Овај програм се састоји од само две наредбе. Прва каже Карелу да се помери једно поље напред, а друга да узме лоптицу.

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

Прикључивање библиотеке karel

Наредбе помоћу којих управљамо Карелом налазе се у библиотеци karel. Зато на почетку програма треба да кажемо рачунару (тачније програму који извршава наш програм) да прво прикључи дефиниције команди за управљање Карелом. То се постиже првом линијом програма: from karel import *. Сваки наш програм који се бави Карелом, треба да почне овако.

Имајте на уму да библиотека karel за сада може да се користи само у овом окружењу. Остале програме које будете писали можете покретати и на друге начине, али на то ћемо вас подсетити када за то буде време.

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

Помери се једно поље напред и узми три лоптице

Напишите програм на основу којега ће се Карел померити на поље (2, 1) и покупити три од пет лоптица које се тамо налазе.

У овом програму након наредбе napred(), наредбу 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_intro_two_squares_five_balls)

Следи сличан, али нешто тежи задатак.

Дођи до лоптице и узми је

Напишите програм на основу којега ће Карел доћи на поље (4, 1) и покупити лоптицу.

Задатак се суштински не разликује од претходног. И сада је потребно навести Карела до циљног поља и рећи му да узме лоптицу. Разлика је у томе што је сада путања до циљног поља дужа, а тиме и наш програм:

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

Читајући овај програм, постаје тешко да се прати која наредба докле доводи Карела. То није тако само са почетницима, то је стварно тешко, јер свака наредба napred() изгледа исто. Да бисмо помогли себи (и вама), иза сваке наредбе смо додали знак # и неки текст који нам помаже да пратимо „докле смо стигли”.

Коментари

Део било ког Пајтон програма од знака # до краја реда се зове коментар. Коментари не утичу на извршавање програма, програм ради исто са или без њих. Коментари су намењени само људима који читају и пишу програме, да би боље разумели те програме и лакше се у њима сналазили.

Када размишљамо о писању коментара у програму, треба да их пишемо и због себе и због других људи који ће читати наш програм. Исто тако, коментари које други људи напишу у својим програмима помоћи ће нама да разумемо њихове програме.

За писање коментара не постоје прецизна правила. Пишите у коментаре оно што сматрате да би помогло разумевању вашег програма.

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

У овом примеру, лоптице се налазе на разним пољима и потребно је да доведемо Карела до сваке од тих лоптица.

Напишите програм на основу којега ће Карел покупити све четири лоптице.

Путању можемо бирати на више начина, али што краћу путању изаберемо, краћи ће бити и програм. Можемо на пример прво да узмемо лоптицу на пољу (5, 2), затим две лоптице на пољу (5, 5) и на крају лоптицу на пољу (4, 4).

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

Груписање наредби

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

Приметите да је при оваквом писању програма потребно између наредби писати знак ; (иза последње наредбе у реду, овај знак се не пише).

Наредбе могу да се групишу и другачије, на пример тако што се група наредби (написаних једна испод друге) раздвоји празним редом од следеће групе. Овакав начин груписања је много чешће у употреби, јер наредбе обично нису тако тако кратке као ове за управљање Карелом. Ево како би то изгледало:

from karel import *

# idi do polja (3, 1) i okreni se na sever"
napred()
napred()
levo()

# idi do polja (3, 3) i okreni se na istok
napred()
napred()
desno()

# idi do polja (5, 3) i okreni se na jug
napred()
napred()
desno()

# dodji na polje (5, 2) i uzmi lopticu
napred()
uzmi()

# okreni se na sever
levo()
levo()

# dodji na polje (5, 5)
napred()
napred()
napred()

# uzmi dve loptice
uzmi()
uzmi()

# idi na polje (4, 4)
levo()
napred()
levo()
napred()

# uzmi poslednju lopticu na polju (4, 4)
uzmi()

Карел може и да оставља лоптице на поједина поља. Ево како он то може да уради.

Премести лоптицу

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

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

Грешке при извршавању

Имајте на уму да Карел не може у сваком тренутку да изврши сваку наредбу коју му задамо. Конкретније, Карел не може да иде напред ако је испред њега зид, не може да узме лоптицу тамо где је нема, и не може да је остави ако нема лоптица код себе.

Пробајте да обришете прву наредбу levo() у претходном програму, па покрените програм и видите шта се дешава.

Када програм који извршава наш програм дође до наредбе коју није могуће извршити, извршавање нашег програма се прекида и добијамо поруку о грешци при извршавању. Такве поруке су нормална ствар и виђаћемо их када год Карел није у могућности „да нас послуша”, или када је нека наредба нејасна (тачније, када није написана како треба). У таквим ситуацијама треба да се потрудимо да разумемо у чему је проблем, па да поправимо програм и поново га покренемо.

У наставку је дато неколико задатка за самосталан рад. Уз сваки задатак понуђено је решење, које можете да видите када кликнете на дугме „решење”. Приказано решење можте да ископирате у простор за решавање и испробате га покретањем програма. Ваше решење може да буде сасвим добро иако је друкчије од нашег.

Задаци за вежбу

Дођи до поља (3, 3)

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

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

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

Напишите програм на основу којега ће се Карел покупити лоптице.

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

Кривудање

Карел треба да стигне до поља (5, 1).

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

Право па лево, па опет

Карел треба да стигне до поља (2, 3).

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