Metodika výučby programovania - stavebnice RoboLab |
---|
Prírodovedecká fakulta UPJŠ, Ústav informatiky |
mapa diplomového webu |
komunikácia jednoduchá | komunikácia potvrdená | komunikácia vetvená | komunikácia a udalosti | komunikácia s kontajnermi |
Už ste počuli niekedy o škriatkoch? Určite áno. Každý si asi predstaví nejakú rozprávku, v ktorej zlý škriatok škodil ľuďom alebo zvieratkám. Ale ja som mala na mysli škriatka ako vírus.
Tento vírus je pomerne otravný. Prejavuje sa tak, že chce, aby ste stláčali rôzne klávesy. Ak pracujete na počítači, tak je to dosť nepríjemné. Nikto by nechcel mať takýto vírus v počítači.
Predstavte si, že by vašu kocku napadol takýto vírus. Neprestajne by pípala a pípala v rovnakých intervaloch. Jedinou možnosťou, ako tento nepríjemný zvuk zastaviť, je posielanie správ.
Váš vírus je ale pomerne slabo naprogramovaný. Čo nás veľmi teší. Znamená to toľko, že ak mu pošlete číslo väčšie ako nejaké zvolené (kocka si ho náhodne vygeneruje ), tak sa z kocky zmaže. Pokúsme sa teda naprogramovať samotný vírus a aj program, ktorý ho zničí.
Pokúsme sa teraz naprogramovať správanie vírusu. Keďže každý pozná príkaz opakovania ( cyklus ), tak nebudete prekvapení, ak vám poviem, že ho v tomto príklade využijeme.
Podľa zadanie má kocka pípať, kým jej nebude doručená správa väčšej hodnoty, ako si sama zvolila. Preto na začiatku programu, musí byť generovanie náhodnej hodnoty. Keďže hovoríme o víruse, tak to asi nebude nejaká malá hodnota, napríklad od 0 po 100. Čo ak vírus bude generovať hodnoty od 100 po 200? Ako nato?
S kontajnermi ste pravdepodobne už pracovali. Preto by generovanie takéhoto čísla nemal byť problém. Ale ak nie, tak generovanie čísla v takomto rozsahu musí prebiehať v 2 krokoch. V prvom je zvolené náhodné číslo z intervalu 0 až 100. Keďže chceme čísla väčšie ako 100, tak nám k tejto hodnote stačí pripočítať 100. Pri realizovaní generovania musíme použiť kontajnery. V našom prípade modrý. Potom náhodné generovanie čísla od 100 po 200 v prostredí Robolab vyzerá takto:
Škriatok má pípať, kým mu nie je doručená správa s hodnotou vyššou ako ním zvolené číslo. Preto musíme zabezpečiť opakovanie skupiny príkazov, kým mu nebude doručená správa s požadovanou vlastnosťou. Na to použijeme nový príkaz opakovania.
Tento príkaz zabezpečí opakovanie príkazov v jeho tele dovtedy, kým kocke nebude doručená správa s hodnotou väčšou ako je zadaná hranica. V tele tohto cyklu sa musí nachádzať aj čakanie na doručenie správy, aby sa hodnota správy menila. |
Príkazy pípania, posielania a čakania na správu poznáte. Preto už pre vás nebude ťažké zostaviť daný program tak, aby po doručení správy sa začal vykonávať príkaz opakovania. V jeho tele sa nachádza pípnutie, poslanie správy prvej kocke ( aby vedela, že ešte vírus nebol zničený ) a čakanie na ďalšiu správu. Ak už vírus bol zničený, tak o tom musí 1. kocka vedieť. Dozvie sa to pomocou hodnoty v správe. 201.
Už máme naprogramovaný vírus. Teraz sa pustime do programovania trpaslíka ( vírus, ktorý ničí škriatka ). Podľa zadania, má trpaslík posielať správy v rozpätí 0-200 dovtedy, kým nebude hodnota vyššia, ako si zmyslel škriatok. Keďže trpaslík je lenivý cielene hľadať takéto číslo, tak len náhodne tipuje. Pošle túto správu a čaká na odpoveď. Ak neuhádol, tak háda ďalej. Inak program skončí a vírus bol zničený. Rovnako ako v predchádzajúcom prípade použijeme príkaz opakovania.
Všetky príkazy už poznáte. Dokonca aj príkaz opakovania, kým hodnota správy je nižšia ako zadaná hranica. Stačí nám to len pospájať. :-)
Mohlo by sa zdať, že program beží bezproblémovo. Ale opak je pravdou. Spomeňte si na vynulovanie schránky na správy. Hovorili sme, že sa nemusia vždy používať. A teraz nastal prípad, kedy je to nevyhnutné. Prečo?
Ak spustíte prvýkrát program, tak všetko prebehne bezproblémovo. Ale pri opakovanom spustení sa nič neudeje. Prečo? Lebo RCX kocka si pamätá hodnotu poslednej správy. Tá bola 201. Lebo vírus bol zničený. A preto príkaz opakovania sa nebude vykonávať a program skončí. Preto by program mal vyzerať takto: