Autorské riešenie Pri riešení úlohy musíme, jednak pokosiť nepokosené políčka záhrady, t. j. vykresliť zelenou farbou zadaý počet políčok, a tiež vypočítať, na ktorom políčku zastala kosačka. Záhradu pokosíme nasledovným spôsobom. Najprv vyfarbíme počiatočné políčko, na ktorom stojí kosačka (=korytnačka). Potom budeme opakovane zisťovať, či je políčko pred nami nepokosené (vyfarbené tmavozelenou farbou = "zelená3). Ak je nepokosené, tak ho pokosíme (vyfarbíme zelenou farbou). Ak máme pred sebou už pokosené políčko (vyfarbené zelenou farbou) alebo políčko mimo záhrady (vyfarbené bielou farbou), tak sa vrátime späť na políčko a otočíme sa vľavo o 90 stupňov. Tento postup môžme prepísať do programovacieho jazyka Imagine Logo nasledovne: viem pokos :n
ph nechFv "zelená výplň urobTu "krok 1 kým [:krok<:n] [ do :a ak2 farbaBodu="zelená3 [výplň zvýš "krok] [vz :a vl 90] ] koniec Pre opakovanie sme nepoužili príkaz OPAKUJ, ale KÝM, lebo pri opakovaní robíme kroky nielen pri vyfarbovaní, ale aj pri zisťovaní, či je pred nami nepokosené políčko. Na počítanie vyfarbených políčok používame premennú "krok. Tento program vyzerá, že bude správne fungovať. Čo však, ak zadáme počet krokov kosačky :n väčší ako celkový počet políčok :x * :y? Takýto program sa nám zacyklí, lebo po vykosení všetkých políčok nemôže dosiahnuť hodnotu :n. Preto v cykle KÝM namiesto podmienky [:krok<:n] uvedieme podmienku, v ktorej doplníme testovanie aj na porovnanie počtu krokov s celkovým počtom políčok, t. j.: Po ukončení cyklu otestujeme, či bol cyklus ukončený z dôvodu presiahnutia celkového počtu krokov nad počtom políčok záhrady. Okrem správneho vykosenia záhrady potrebujeme vypočítať pozíciu kosačky na konci kosenia. Jeden spôsob riešenia je taký, že si zapamätáme súradnice kosačky na začiatku kosenia a na konci kosenia. Potom tieto súradnice odpočítame a predelíme veľkosťou štvorcového políčka záhrady. Výsledný program riešiaci zadanie našej úlohy môže vyzerať nasledovne:
viem pokos :n
urobTu "x0 xSúr urobTu "y0 ySúr ph nechFv "zelená výplň urobTu "krok 1 kým [zároveň :krok<:n :krok<:x*:y] [ do :a ak2 farbaBodu="zelená3 [výplň zvýš "krok] [vz :a vl 90] ] ak :n>:x*:y [píš "|Počet krokov je viac ako políčok na trávniku|] Poznámka: Vaše zaujímavé riešenia a najčastejšie chyby Úlohu riešilo 24 tímov. Aj keď úloha nevyzerala príloiš náročne, žiadnemu tímu sa nepodarilo získať plný počet bodov. Najčastejšie chyby:
Chválime:
|
||||||||||
© Univerzita Pavla Jozefa Šafárika v Košiciach, Prírodovedecká fakulta, Ústav informatiky palmaj (zavinac) upjs.sk |