Autorské riešenie
Pri riešení tejto úlohy je dôležité rozhodnúť sa pre vhodné kódovanie, pomocou ktorého zadáme postupnosť kopcov, ktoré má trenažér vykresliť. Napr.:
V ďalšom kroku sa rozhodneme, ako budú jednotlivé kopce vyzerať. Aby sme sa vyhli náročným výpočtom pre nejaký všeobecný trojuholník (ktorým je každý kopec trenažéra), zvolíme si "rovnoramenné" kopce, každému určíme uhol stúpania a dĺžku jeho "ramena":
Keďže v zadaní nebolo presne uvedené aké uhly a dĺžky by mali kopce mať, tak nami zvolené uhly a dĺžky sú len jedným z možných. Riešenie rozdelíme na jednotlivé podúlohy - procedúry:
Pri kreslení kopca v procedúre kopec využijeme naše vedomosti o rovnoramennom trojuholníku:
Ramená trojuholníka majú zhodnú veľkosť, uhly pri základni trojuholníka sú rovnaké (v našom prípade tento uhol voláme uhol stúpania alebo uhol klesania). Ak teda na začiatku kreslenia nasmerujeme korytnačku doprava, kreslenie začneme jej otočením vľavo o uhol u, posunieme ju dopredu o dĺžku d - vykreslili sme stúpajúce "rameno". Teraz potrebujeme otočiť korytnačku tak, aby klesla. Uhol oproti základni má veľkosť 180° - 2 * u, preto potrebujeme korytnačku otočiť vpravo o vonkajší uhol k uhlu 180° - 2 * u, teda o 180° - (180° - 2 * u) = 2 * u. ;Imagine
logo
viem kopec :dlzka :uhol vlavo :uhol dopredu :dlzka vpravo 2 * :uhol dopredu :dlzka vlavo :uhol koniec Procedúra kresli na základe kódu kopca, ktorý jej pošleme ako parameter, zavolá funkciu kopec s príslušnými hodnotami: ;Imagine
logo
viem kresli :kopec akJe :kopec [ 1 [kopec 30 20] 2 [kopec 45 40] 3 [kopec 60 60] ] koniec Teraz už môžeme vytvoriť výslednú procedúru trasa. Na začiatku nasmerujeme korytnačku doprava a vykreslíme jednotlivé kopce na základe ich kódov (parametrov procedúry trasa ;Imagine
logo
viem trasa :kopec1 :kopec2 :kopec3 znova vpravo 90 kresli :kopec1 kresli :kopec2 kresli :kopec3 koniec Vaše zaujímavé riešenia a najčastejšie chyby Samotné vykreslenie kopcov zvládla väčšina z vás. Pri zisťovaní aký kopec vykresliť ste neefektívne používali príkaz AK, ktorý ste uviedli viac krát za sebou. Výhodnejšie je použiť vnorený príkaz AK2, alebo príkaz AKJE. Takéto riešenie použili len traja z vás. Podobne neefektívne ste riešili samotné vykresľovanie kopca a pre každý z troch rôznych kopcov ste mali samostatný kód alebo samostatnú procedúru. Riešenie s jednou procedúrou, ktorá by podľa parametrov nakreslila vybraný kopec nepoužil nikto. |
||||||||||||||||||||||
© Univerzita Pavla Jozefa Šafárika v Košiciach, Prírodovedecká fakulta, Ústav informatiky palmaj (zavinac) upjs.sk |