Programiranje u Skreču, praktikum za peti razred

Листе

У програмима које смо креирали у претходним поглављима користили смо само просте типове података – свака променљива чувала је вредност једног податка. Међутим , често је потребно под једним именом чувати читав низ података, на пример низ бројева. Ако желимо да чувамо бројеве телефона својих 10 другова, требало би да направимо 10 променљивих што није баш лако одржавати, па користимо сложени тип података који се у Скречу назива листа.

Шта је листа?

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

  1. У групи Подаци кликне се на дугме Направи листу.
  2. У дијалошки прозор који се потом појави упише се име листе и потврди кликом на дугме У реду.
_images/lista1.png
  1. На позорници ће се појавити празан монитор листе на чијем дну пише да листа тренутно има дужину 0.
  2. Кликом на знак „+“, који се налази у доњем левом углу, отвара се поље за упис првог елемента, а дужина листе се повећава за 1.
  3. У празно поље треба уписати први елемент листе.
_images/lista2.png

Понављањем овог поступка може се уписати жељени број елемената листе.

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

_images/lista3.png

prouci Проучи следеће примере пројеката

У пројекту "Kвиз" постоје листа питања и листа тачних одговора. Питања и одговори могу се
ручно унети унапред или се читају из текстуалне датотеке.
Кориснику се на случајан начин постављају питања и проверава се да ли је дао тачан одговор.
Ако јесте, добија поен, ако не - саопштава му се тачан одговор.
На крају се, на основу броја тачних одговора, може дати оцена.

Пример 1 - Пројекат Квиз знања

У овом примеру илустроваћемо како се може направити квиз из математике. Квизом се проверава да ли учесници умеју да одреде највећи заједнички делилац за два или три броја. Питања се налазе у листи бројеви, а одговори у листи нзд (највећи заједнички делилац). Да би се могло пролазити кроз листе користимо променљиву к чија вредност се мења од 1 до 8 (број елемената листе), а број тачних одговора памтимо у променљивој б.

_images/Kviz1.png

Следи приказ скрипте овог пројекта.

_images/Kviz2.png
Следећи пројекат илуструје како се на случајан начин могу бирати елементи листе.
Ми ћемо користити репортер који враћа вредност оног елемента листе чији се редни број
упише у поље за редни број. Тако, ако на случајан начин генеришемо променљиву број,
његовим постављањем у поље за редни број добићемо онај елемент листе који се налази на
тој позицији.
У пројекту је такође показано како се бројеви генерисани на случајан начин могу
искористити за разглашавање различитих порука.

Пример 2 - Пројекат Глад

У пројекту учествује 10 ликова - гладни мачак и 9 врста хране о којој мачак машта.

_images/Glad1.png

Мачак шета лево -десно и „замишља” по 3 секунде једну од 11 реченицa које се на случајан начин бирају из листе реченица под називом храна.

_images/Glad2.png

У време док се види облачак zamisli_sec у белом облаку на средини позорнице појављује се храна коју мачак замишља.

_images/Glad3.png

Усклађивање појављивања хране и мачковог замишљања обавља се разменом порука.

Наиме, променљива број која се генерише на случајан начин, користи се како за бирање реченице из листе храна, тако и за генерисање поруке 1 до 11. На поруке 1 и 11 нико не одговара, а на поруке од 2 до 9 реагују ликови чија су имена ти бројеви.

На пример, миш који је лик „2” реагује на поруку 2, птица која је лик „3” реагује на поруку 3 и тако редом.

_images/Glad4.png

Реакција сваког лика је иста: покажу се 2 секунде док се види облачак са мачковим размишљањем и онда поново сакрију. Сви ликови (осим мачка) по клику на зелену заставицу иду на позицију (0,110) у средини белог облака и сакривају се.

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

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

Пример 3 - Пројекат Храна

Сценарио пројекта

Главни лик овог пројекта, девојчица Зара, за време школског одмора може да поједе нешто од хране, попије воду или узме поклон. Ти бираш за Зару шта ће да узме кликом на ствари које се појаве на позорници. Ако изабереш храну која гоји - сендвич, смоки или крофну, добијаш негативне бодове. Ако пак изабереш воће - наранџу, банану или јабуку, добијаш позитивне бодове. Узимање воде или поклона не доноси никакве бодове.

_images/Hrana1.png

Називи предмета који доносе позитивне бодове налазе се у једној листи (код нас „воће”), а оних који доносе негативне у другој (код нас „гоји”).

_images/Hrana2.png

Понашање ликова

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

_images/Hrana3.png

Скрипте придружене Зари омогућавају израчунавање броја бодова у зависности од тога која је храна изабрана.

_images/Hrana4.png
Следећи пример је знатно сложенији од претходних који су презентирали само основе рада са
листама. То је образовна игра  намењена  деци млађег узраста за почетно учење сабирања и
одузимања.
Кроз креирање овог пројекта научићемо како се програмским путем могу правити клонови
ликова, каква је разлика између глобалне и локалне променљиве и како се у Скречу креирају
и користе листе.

Пример 4 - Пројекат Чаробњак Збуњенко

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

Ту је и његова помоћница која пажљиво прати шта је Збуњенко обећао и колико је примерака направио, па га опомиње ако погреши.

_images/Zbunjenko1.png

Како чаробњак обећава различите ствари

Да би чаробњак могао да обећава ствари креира се лик чији костими су различити предмети. Осим тога направи се листа са називима тих предмета. У нашем пројекту креирали смо лик који смо назвали Створење које може да се појави у 5 различитих костима.

_images/Zbunjenko2.png

Да би чаробњак могао да изговара називе костима увели смо листу којој смо дали име ствари и у њу уписали 5 назива костима (у множини и падежу). На случајан начин генерише се број између 1 и 5 и онда чаробњак изговара реченицу у којој се повезују текст „Сада ћу да створим“ и одговарајући елемент ове листе. На пример, ако се генерише број 2 чаробњак ће да каже „Сада ћу да створим јабуке“, а ако се генерише број 4 каже „Сада ћу да створим лептире“.

_images/Zbunjenko3.png

Следећа слика илустује креирање листе. Кораци од 1 до 5 одговарају упутству за креирање листе с почетка овог поглавља.

_images/Zbunjenko4.png

На следећој слици приказана је скрипта која описује понашање чаробњака Збуњенка када се кликне на њега. Прво генерише вредност променљиве број као случајан број из интервала [1,5]. Затим у реченици коју потом изговара каже да ће створити неки од костима лика створење и то онај који се у листи налази под редним бројем једнаким генерисаном броју. Затим разглашава поруку хвалим се на коју реагује мала чаробница тако што током 2 секунде пита колико ће примерака створења Збуњенко створити. Зато је у скрипту Збуњенка уметнуто чекање од 2 секунде. После ове паузе Збуњенко генерише вредност променљиве колико из интервала [1,10]. Како су димензије костима лика створење подешене на око 50х50 пиксела за максималан број примерака створења које ће „створити“ Збуњенко изабрали смо број 10 да би се сви примерци видели на екрану. Збуњенко изговара колико ће примерака створити и разглашава поруку стварам.

_images/Zbunjenko6.png

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

_images/Zbunjenko7.png

На следећој слици приказане су скрипте које описују понашање лика створење. Овај лик реагује на 4 догађаја: клик на зелену заставицу, разглашавање порука стварам и сакриј и догађај клонирања. По клику на зелену заставицу створење се сакрива, а по пријему поруке сакриј мења вредност променљиве следећи. Ова променљива, за разлику од глобалних променљивих број и колико које могу да користе сви ликови, креирана је само за лик створење (види репортере на сл. 6.20), дакле то је локална променљива. Карактеристика локалних променљивих је да њихову вредност може да мења само лик за који су креирани. Други ликови могу да виде њихове вредности, али не могу да их мењају. Променљива следећи користи се као окидач. Када се њена вредност промени из 0, на колико је постављена на почетку рекације на поруку стварам, у 1 почиње уништавање клонова и сакрива се.

_images/Zbunjenko8.png

Како чаробњак приказује различит број примерака лика

Остаје још да објаснимо како чаробњак може да прикаже више примерака неког лика (односно костима лика створење). За ову сврху користи клонирање (умножавање)ликова. Већ смо показали да се лик (и све скрипте које су му придружене) може умножити ако се из приручног менија који се добије десним кликом на лик у листи ликова изабере опција умножи у време креирања програма. У Скречу постоји и могућност да се лик умножава и за време извршавања програма. (Слично као што у листе могу да се уписују елементи и у време креирања и за време извршавања програма.) За клонирање лика и управљање понашањем клона користе се инструкције , и из групе Управљање. У срипти која описију понашање створења када прими чаробњакову поруку стварам на левом рубу екрана приказује се лик, а затим се праве и приказују његови клонови – умножци. Сваки клон се приказује на растојању 50 корака од претходног тако да стоје један поред другог у низу. Ово се реализује у петљи која се понавља (колико-1) пута чиме се скупа са оригиналним ликом добије обећанброј примерака лика. Како је променљива следећи локална за лик који се клонира, сваки од његових клонова има сопствену вредност ове променљиве и сваки од њих се види на позорници све док променљива следећи не добије вредност 1 (када лик добије поруку сакриј). Тада сваки клон брише самог себе, а изворни лик се сакрива.

_images/Zbunjenko9.png

Надоградња пројекта Чаробњак Збуњенко2

Идеја је да чаробњак не створи онолико предмета колико је обећао, већ нешто више или нешто мање. Корисник треба да каже колико више или колико мање предмета је чаробњак створио, односно дете треба да научи да сабира и одузима бројеве до 10. Ово постижемо тако што генеришемо променљиву грешка чије вредности могу да буду цели бројеви из интервала [-3,3]. Разуме се, ако буде генерисана грешка 0, чаробњак ће створити тачно онолико предмета колико је обећао, али у осталим случајевима треба утврдити колико је направио више или мање предмета. На следећој слици приказани су неки од случајева „збуњивања“ чаробњака.

_images/Zbunjenko10.png

Понашање Чаробњака збуњенка описује следећа скрипта.

_images/Zbunjenko11.png

Следи скрипта која описује понашање мале Чаробнице.

_images/Zbunjenko12.png

Упамтите овако измењен пројекат под називом Чаробњак Збуњенко 2.

Напомена. Ако се пројекат користи за увежбавање сабирања и одузимања бројева до 10 корисно је уметнути „празно“ питање pitaj_cekaj у скрипту мале чаробнице уместо задршке блоком cekaj . Тек када дете да одговор притиснућемо дирку Enter и проверити одговор.

pitaj Одговори на следећа питања

За сва питања која следе подразумева се да листа на почетку има следеће елементе

_images/pitanje8_1.png

Питање 1

    Q-55: Шта је резултат извршавања наредбе l1? (Изабери све тачне одговоре)
  • листа ће имати један елемент мање
  • Избацује се елемент који је претходно био на позицији 1.
  • на првом месту налазиће се елемент наранџа
  • Остали елементи листе се померају једно место унапред.
  • елемент се пребацује на крај листе
  • Елемент се потпуно избацује из листе.
  • избацује се последњи елемент листе
  • Избацује се први елемент.

Питање 2

    Q-56: Шта је резултат извршавања наредбе l2?
  • елемент ће бити додат на почетак листе
  • Ова наредба додаје на крај листе.
  • елемент ће бити додат на крај листе
  • елемент ће бити додат под условом да претходно није био у листи
  • Не врши се никаква провера.

Питање 3

    Q-57: Колико пута ће лик изговорити „Волим воће”?

    _images/pitanje8_3.png
  • ниједном
  • Листа има 3 елемента.
  • једном
  • Листа има 3 елемента.
  • 2 пута
  • Листа има 3 елемента.
  • 3 пута

Питање 4

    Q-58: Које наредбе ће у листу воће поставити елемент јагода на позицију 2? (Изабери све тачне одговоре)

    _images/pitanje8_4.png
  • Ова наредба поставља елемент на крај листе.
  • Наредба умеће елемент на место број 2.
  • Наредба поставља елемент на место број 2, a избацујe из листе елемент који је ту био.

Питање 5

    Q-59: После извршења којих наредби ће се повећати број елемената листе? (Изабери све тачне одговоре)

    _images/pitanje8_4.png
  • Ова наредба поставља елемент на крај листе.
  • Наредба умеће елемент на место број 2.
  • Наредба поставља елемент на место број 2, a избацујe из листе елемент који је ту био.

Питање 6

    Q-60: Шта је резултат извршавања следећих наредби?

    _images/pitanje8_5.png
  • Ако је листа имала елемент јагода, њена величина се неће променити, а ако није, додаје јагоду на крај листе.
  • Без обзира да ли је у листи постојао елемент јагода, додаће га на крај листе.
  • Упис у листу остварује се ако листа претходно није имла елемент јагода.
  • Ако је листа имала елемент јагода, њена величина се неће променити, а ако није, додаје јагоду на почетак листе.
  • Ако се додаје, додаје се на крај листе.

pokusaj Покушај

У прве 3 вежбе претпоставља се да имамо листу оригинал чији су елементи редом бројеви од 1 до 10.

Вежба 1

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

Вежба 2

Напиши скрипту која креира листу уназад и у њу уписује све елементе постојеће листе оригинал обрнутим редоследом, тј. први елемент листе уназад треба да буде последњи елемент листе оригинал, други - претпоследњи из оригинал и тако све до првог елемента листе оригинал који треба да буде последњи у листи уназад.

Вежба 3

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

Вежба 4

Напиши скрипту која креира листу случајни1 и у њу уписује 10 бројева из интервала [1,100] генерисаних операцијом случајан број.

Вежба 5

Напиши скрипту која креира листу случајни2 и у њу уписује 10 РАЗЛИЧИТИХ бројева из интервала [1,100] генерисаних операцијом случајан број.

bug Исправи грешке

Грешка 1

Ученик је желео да промени пример 3 овог поглавља тако да се у нову листу поједено уписују називи хране које Зара изабере. Зари је придружио скрипте за кретање помоћу дирки стрелица и скрипту која је приказана на следећој слици. На слици су и скрипте придружене осталим ликовима пројекта. Већина догађаја се извршавала онако како је ученик желео, али јабуку и наранџу никако није успевао да упише у листу. У чему је грешка?

_images/greska8_1.png

Одговор:

У скриптама јабуке и наранџе у наредби „чекај док не” није добро постављен лик са којим треба да се додирну.

knjiga Шта смо научили

Појмови: листа, елемент листе, умножак (клон).

Наредбе: podaci - dodaj, izbaci, ubaci, zameni, pokazi_listu, sakrij_listu;

upravljanje - kad_umnozak, napravi_umnozak, obrisi_umnozak.

Функцијски блокови: element, velicina_liste, sadrzi.

project Уради неки од следећих пројеката

Пројекат 1 - Квиз из историје

Учитај листу питања из текстуалног фајла.

  1. Коришћењем програма Notepad испиши листу питања из историје, свако у засебном реду.
  2. Упамти текст као текстуални фајл под именом Историја.txt са начином кодирања UTF-8
_images/projekat8_1a.png
  1. У Скречу направи листу под називом питања.
  2. Десним кликом на монитор листе отвори падајући мени и изабери операцију увези.
_images/projekat8_1b.png
  1. У поље за име фајла упиши Историја
  2. У твојој листи појавиће се листа питања која си претходно саставио у Notepad-у.
_images/projekat8_1c.png

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

Пројекат 2 - Телефонски именик

Направи три листе у којима се налазе имена, датуми рођења и бројеви телефона твојих другара. Напиши скрипту која проверава да ли се име које се уноси са улаза налази у листи имена. Ако је име у листи, треба да се приказује датум рођења и телефон особе чије је име унето, а ако није треба да се прикаже одговарајућа порука.

Пројекат 3 - Игра Опасни предмети

Креирај игру у којој корисник (мало дете) из групе предмета треба да издвоји неколико који нису опасни. Називи (или редни бројеви костима, као у примеру 4 овог поглавља) опасних предмета са позорнице треба да буду уписани у листу опасан. Предмети се бирају кликом на њих. Затим се проверава да ли је тај предмет у листи опасних. За избор предмета који није опасан добија се позитиван, а за избор опасних негативан поен. Циљ је сакупити бар 3 (рецимо од 5 могућих) поена. Тада се игра завршава или се прелази на следећи ниво.

Игра може да има више нивоа, на пример опасности у кухињи (нож, посуда са врелом водом, ватра,…), опасности у дворишту, опасности у природи и слично.