Autorské riešenie Vieme, že robot vo veku troch rokov ma takúto fotku:
To znamená, že ak má jeden rok, tak jeho fotka bude mať iba jednu hlavu, dve oči a dve uši.
Ako vidíme, tak hlava robota je symetrická podľa niekoľkých osí (zvislej, vodorovnej). Túto skutočnosť využijeme pri vykresľovaní hlavy, ktorá pozostáva z dvoch rovnakých časti vymedzených (modrou) úsečkou:
Začneme kresliť z dolného pravého rohu (červené bodka) a v cykle s dvoma opakovaniami vykreslíme tvár. Na vykreslenie tváre jednoročného robotoobra s veľkosťou hlavy a, vytvoríme procedúru robotobor s parametrom a. viem robotobor :a opakuj 2 [ do :a/4 ;kreslenie oka ph do :a/8 pd polygon [opakuj 4 [do (:a/4) vl 90]] ph vz :a/8 pd vp 90 ;konec kreslenia oka do :a/4 vl 90 do :a/2 vl 90 do :a/4 vp 90 do :a/4 vl 90 do :a vl 90 ] koniec Podľa zadania vieme, že každý rok narastie robotobrovi na ušiach ďalšia hlava.
Vytvorenú procedúru robotobor upravíme tak, že v časti po vykreslení oka a úsečky s dĺžkou a/4 pred vykreslením ucha vsunieme rekurzívnu procedúru na vykreslenie hlavy s parametrom a/2.
Upravená procedúra robotobor vyzerá takto: viem robotobor :a
opakuj 2 [ do :a/4
;kreslenie oka
ph do :a/8 pd
polygon [opakuj 4 [do (:a/4) vl 90]]
ph vz :a/8 pd
vp 90
;konec kreslenia oka
do :a/4
robotobor :a/2
vl 90
do :a/2 vl 90
do :a/4 vp 90
do :a/4 vl 90
do :a vl 90
]
koniec
Aby sme zabezpečili konečnosť rekurzívnej procedúry, doplníme do procedúry ďalší parameter n, ktorý bude predstavovať počet rokov robotobra a doplníme podmienku, kedy budeme vykonávať túto procedúru. Výsledná procedúra bude vyzerať nasledovne: viem robotobor :a :n ak :n>=1 [ opakuj 2 [ do :a/4 ;kreslenie oka ph do :a/8 pd polygon [opakuj 4 [do (:a/4) vl 90]] ph vz :a/8 pd vp 90 ;konec kreslenia oka do :a/4 robotobor :a/2 :n-1 vl 90 do :a/2 vl 90 do :a/4 vp 90 do :a/4 vl 90 do :a vl 90 ] ] koniec Ak má robotobor štyri roky, jeho hlava vyzerá takto :-) :
Vaše zaujímavé riešenia a najčastejšie chyby Len jeden riešiteľ vyriešil úlohu úplne správne. V riešeniach sme našli tieto chyby:
V dvoch riešeniach sa objavila procedúra štart, ktorá nebola vhodne použitá. Zápisy niektorých procedúr boli neprehľadné, do jedného riadku odporúčame písať jeden príkaz, resp. skupinu príkazov, ktoré nejako evidentne súvisia napr. riešia nejakú podúlohu. | ||||||||||
© Univerzita Pavla Jozefa Šafárika v Košiciach, Prírodovedecká fakulta, Ústav informatiky palmaj (zavinac) upjs.sk |