Autorské riešenie Pri každom pohybe korytnačky po bludisku sa do premennej postup typu zoznam
pridáva jedna z hodnôt P (vpravo), L (vľavo), H (hore), D (dole). Výsledkom pohybu korytnačky po bludisku môže byť napríklad zoznam: Aj keď cesta korytnačky mohla byť ľubovoľná, späť by sa mala vrátiť najkratšou cestou. Najskôr sa posunie v zvislom smere, potom vo vodorovnom smere. Ako však zistiť, o koľko krokov sa má korytnačka posunúť v zvislom a o koľko vo vodorovnom smere? Rovnaké počty krokov hore a dole spôsobia, že korytnačka skončí na mieste kde začala. Po krokoch [H H D H D D] je korytnačka opäť na rovnakom mieste. Ak niektorý počet krokov v jednom smere prevláda, korytnačka sa posunie v tom smere, v ktorom počet krokov prevláda. Po krokoch [H H D H D] skonči korytnačka o jeden krok hore. Stačí nám teda spraviť rozdiel počtu krokov hore a dole. Za každý krok hore pripočítame k zvislému smeru 1, za každý dole odpočítame od zvislého smeru 1. Výsledkom je počet krokov v zvislom smere od štartovacej pozície. To isté platí aj vo vodorovnom smere. Za každý krok vpravo pripočítame k vodorovnému smeru 1, za krok vľavo odpočítame 1. Výsledkom je počet krokov vo vodorovnom smere od štartovacej pozície. Na spracovanie prvkov zoznamu postup použijeme príkaz prePrvky.
prePrvky "kam :postup
[ ak2 :kam="H [urobtu "y :y+1] [ak2 :kam="D [urobtu "y :y-1] [ak2 :kam="L [urobtu "x :x-1] [urobtu "x :x+1] ] ] ] Hodnoty x a y sú kroky zaznamenané od štartovacej pozície. Späť do štartovacej pozície sa korytnačka vráti posunom o vzdialenosť -y*60 v zvislom smere a -x*60 vo vodorovnom smere.
do -:y*60
vp 90 do -:x*60 Procedúra návrat vyzerá nasledovne:
viem návrat
urobtu "x 0 urobtu "y 0 prePrvky "kam :postup [ ak2 :kam="H [urobtu "y :y+1] [ak2 :kam="D [urobtu "y :y-1] [ak2 :kam="L [urobtu "x :x-1] [urobtu "x :x+1] ] ] ] nechfp "cervena nechhp 3 pd do -:y*60 vp 90 do -:x*60 koniec Vaše zaujímavé riešenia Najčastejšie chyby Najčastejšia chyba, ktorú ste pri riešení úlohy robili, bol spôsob návratu korytnačky na červenú značku. V úlohe bolo napísané, že návrat má byť po najkratšej ceste. Nie po stopách korytnačky.:) Pri správnych riešeniach, chceme upozorniť len skutočnosť, že ste nemuseli pracovať so 4 premennými (najčastejšie nazvaných h, d, l, p). Stačilo sledovať dva smery: os x a y. y= h-d a x=p-l Potom by príkazy vetvenia boli jednoduchšie. |