Autorské riešenie
[stiahni imp]

  • Počet riešiteľov: 7 / 8 = 88 %

  • Úspešnosť riešenia: 2,36 / 4 = 59 %

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.:

  • malý kopec bude reprezentovať číslica 1,
  • stredný kopec bude reprezentovať číslica 2,
  • veľký kopec bude reprezentovať číslica 3.

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":

  uhol stúpania dĺžka "ramena"
malý kopec 20° 30
stredný kopec 40° 45
veľký kopec 60° 60

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:

  • procedúra kopec: vykreslí kopec s danou dĺžkou ramena a uhlom stúpania,
  • procedúra kresli: na základe daného kódu kopca pošle procedúre kopec príslušné hodnoty,
  • procedúra trasa: postupne pošle procedúre kresli kódy jednotlivých kopcov.

Pri kreslení kopca v procedúre kopec využijeme naše vedomosti o rovnoramennom trojuholníku:

alternatívny text k obrázku

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.