Autorské riešenie
[stiahni

  • Počet riešiteľov: 12 / 12 = 100 %

  • Úspešnosť riešenia: 7 / 8 = 88 %

Správne riešenie úlohy spočívalo v prechode zábavným parkom vo vodorovnom a zvislom smere. Tento prechod bol spojený s počítaním počtu atrakcií, ktoré sme počas cesty postupne navštívili a krátkym zastavením sa na týchto atrakciách. Navyše bolo potrebné rátať počet žetónov, ktoré nám ešte zvýšili, pričom na začiatku sme ich dostali 100. Ak nám počet žetónov klesol pod 5, bolo potrebné ešte skontrolovať, či vo zvyšnej časti parku nenájdeme atrakciu, ktorú by sme vedeli navštíviť za zvyšné žetóny.

Keďže zábavný park bol ohraničený čiernym obdĺžnikom, po chvíľke uvažovania a programovania sa dá všimnúť, že procedúry na prechod vodorovným a zvislým smerom budú veľmi podobné. Dokonca sa pokúsime úlohu naprogramovať tak, aby boli zhodné a potom procedúru zabavajsa2 budeme vedieť napísať veľmi rýchlo takýmto spôsobom:

   viem zabavajsa2
     zabavajsa1
   koniec

park.png

Pri programovaní procedúry zabavajsa1 si najprv dôkladne premyslíme, v akej postupnosti je potrebné sformulovať postupnosť podmienok kym,ak, prípadne ak2, aby sme v riešení zahrnuli všetky požiadavky zo zadania.

Budeme si pamätať hodnotu dvoch premenných, napríklad pocetZetonov (na začiatku s hodnotou 100) a pocetAtrakcii (na začiatku je počet navštívených atrakcií 0). Pohyb korytačky do 1 budeme opakovať, až kým nenarazíme na čiernu farbu (na bočnej stene až po prejdení celého parku). Zároveň budeme kontrolovať, či sme nenarazili na čiernu farbu aj počas samotného prechodu. v takom prípade sa potrebujeme otočiť a posunúť na ďalší stĺpec s atrakciami (o 20 krokov). Obyčajný prechod a otočenie, ktoré prekvapujúco funguje aj vodorovným aj zvislým smerom môžeme zapísať takýmito príkazmi:

viem zabavajsa1
   urobTu "pocetZetonov 100
   urobTu "pocetAtrakcii 0
      
   kym [farbaBodu<>"cierna][
     kym [farbaBodu<>"cierna] [
       do 1
       cakaj 1
       ; tu ešte prídu dalšie príkazy, ale prechod už funguje aj bez nich
     ]
     ak2 (alebo smer=90 smer=270)[nechYsur ysur + 20][nechXsur xsur + 20]
     vp 180 do 5
   ]
koniec

Prechod už teda máme vyriešený. Poďme sa vysporiadať s počítaním navštívených atrakcií. Pri každej atrakcii musíme testovať jej farbu a to, či máme dostatok žetónov. Ak sme natrafili na prijateľnú atrakciu, na chvíľku na nej zastavíme, odpočítame príslušný počet žetónov, zvýšime hodnotu celkového počtu navštívených atrakcií a atrakciu opustíme pohybom korytnačky dopredu o 20 krokov. Prípadne môžeme vypísať zostávajúci počet žetónov:

   ak (zaroven farbaBodu = "modra :pocetZetonov>2) [
     cakaj 100
     urobTu "pocetZetonov :pocetZetonov - 3
     zvys "pocetAtrakcii
     do 20
     pis (veta mojeMeno ": :pocetZetonov)
   ]

Pre červenú a zelenú farbu bude podmienka ak vyzerať úplne rovnako, líšiť sa bude len hodnota počtu žetónov. Na záver môžeme pridať ešte jednu podmienku, ktorá v prípade počtu žetónov menšieho ako tri vypíše oznam o celkovom počte navštívených atrakcií, zvyšnom počte žetónov a ukončí vykonávanie procedúry:

   ak :pocetZetonov<3 [
     pis (veta mojeMeno ": [Počet navštívených atrakcií:] :pocetAtrakcii)
     pis (veta mojeMeno ": [Počet zvyšných žetónov:] :pocetZetonov)
     ukonci
   ]

Na záver už len dodávame, že pohyb zábavným parkom vodorovným a zvislým smerom môžeme animovať aj súčasne pomocou pohybu dvoch korytnačiek. Stačí, ak tlačidlu so zvislým prechodom nastavíme príkaz po zapnutí v tvare pre "k1 [nechSmer 0 zabavajSa1] a pre tlačidlo s vodorovným smerom nastavíme príkaz po zapnutí v tvare pre "k2 [nechsmer 90 zabavajSa2].

Vaše zaujímavé riešenia:

Väčšina riešení bola správna, objavili sa však viaceré originálne postupy a vylepšenia. Napríklad jeden z tímov každú navštívenú atrakciu hneď po jej prechode prefarbil svetlejšou farbou, aby tak dosiahol krajšie znázornenie navštívených atrakcií. Plochu ste väčšinou prechádzali dvoma spôsobmi tak, ako je to znázornené na tomto obrázku (uvádzame len zvislý smer):

park2.png

V jednom z riešení ste pracovali aj so zoznamom, do ktorého ste najprv uložili súradnice navštívených atrakcií a až po tomto kroku animovali prechod zábavným parkom. A to už len na základe súradníc atrakcií, ktoré boli uložené v zozname.

Na overenie dostatočného počtu žetónov ste používali aj podmienku ak2. V takom prípade treba pozorne zvážiť, v akom poradí testujete farbu atrakcií, aby nedošlo k nesprávnym výpočtom. Výpis aktuálneho počtu žetónov ste niektorí doplnili aj do textového poľa na ploche programu. Niektorí ste si pomáhali aj testom na bielu farbu.

Viacerí z vás ste si uvedomili podobnosť oboch procedúr, čo ste vyriešili prekopírovaním obsahu procedúry zabavajsa1 do procedúry zabavajsa2 a jej následným doladením. Dve korytnačky v riešení nepoužil žiaden tím. Nechýbali pekné komentáre a zaujímavé pomenovanie premenných, napríklad :rozpocet a podobne.

Na záver uvádzame príkaz, ktorý jeden z tímov použil na to, aby sa korytnačka nielen zastavila, ale aj zabavila na každej z navštívených atrakcií:

   opakuj 8 [vp 45 cakaj 50]

Najčastejšie nedostatky:

  • najčastejšie chýbalo overenie dostatočného počtu žetónov v prípade poslednej atrakcie
  • dostupnosť modrej atrakcie sa overovala nesprávnou podmienkou ak :pocetZetonov>3 (správne môže byť napríklad :pocetZetonov>2)
  • chyby pri prechádzaní celého zábavného parku (posun medzi stĺpcami, resp. riadkami len o 10 krokov, chybný výpočet počtu prejdených krokov a pod.)