Autorské riešenie
[stiahni]

Skôr ako začneme programovať riešenie tejto úlohy, zamyslime sa, čo máme k dispozícii a čo je našou úlohou.

K dispozícii máme záznam o každom prejdenom úseku v tvare [dlzkaUseku prevysenie casUseku]. Prevýšenie môže byť kladné (ak korytnačka v úseku stúpala), záporné (ak išla dolu kopcom) alebo rovné 0 (korytnačka sa viezla po rovine). Keďže hľadáme najstrmší úsek, ktorý korytnačka vyšliapala, zaujímajú nás len tie úseky, kde prevýšenie je kladné. Uvedomme si, že pri niektorých trasách takýto úsek ani nemusí existovať.

Časový údaj zaznamenaný počítačom pre nás nemá význam. Nemusíme si ho teda všímať.

Ostala ešte otázka, ako merať strmosť úseku. Možností je viac. My si však vystačíme s tým, že vypočítame pomer prevýšenia k celkovej prejdenej trase. Čím je tento pomer väčší, tým strmší úsek to je (samozrejme, berieme do úvahy len kladné hodnoty).

Postup je jednoduchý. Prejdeme všetky záznamy úsekov trasy. Každý záznam si uložíme (pre jednoduchšie spracovanie) do premennej zaznam (prePrvky "zaznam :zaznamTrasy [...]). Pri každom zázname úseku zistíme jeho dĺžku (prvok 1 :zaznam) a pripočítame ju celkovej prejdenej trasy ("celkovaTrasa).

Zároveň vypočítame strmosť úseku (prvok 2 :zaznam / prvok 1 :zaznam). Ak je strmosť úseku doposiaľ najväčšia, zapamätáme si ju a zároveň si pamätáme aj poradie tohto úseku ("najstrmsi).

Aby sme mali strmosti úsekov s čím porovnávať, vypočítame si na začiatku strmosť prvého úseku. Tento úsek je zároveň najstrmším, ktorý sme doposiaľ testovali (keďže bol zatiaľ jediný).

Pri vypisovaní výsledku nesmieme zabudnúť, že nás zaujímajú len tie úseky, v ktorých bola strmosť kladné číslo. Ak sme taký úsek nenašli, na prejdenej trati nebolo stúpanie. Výsledná procedúra môže vyzerať takto:

viem vyhodnotTrasu

  ;zapamatame si strmost prveho useku
  urobTu "najstrmsi 1
  urobTu "prvyZaznam prvy :zaznamTrasy
  urobTu "strmost prvok 2 :prvyZaznam / prvok 1 :prvyZaznam

  ;celkovu trasu nastavime na zaciatku na 0
  urobtu "celkovaTrasa 0

  ;prejdeme zaznamom celej trasy a spracujeme kazdy zaznam useku
  prePrvky "zaznam :zaznamTrasy [
    ak prvok 2 :zaznam / prvok 1 :zaznam > :strmost [
      urobTu "strmost prvok 2 :zaznam / prvok 1 :zaznam
      urobTu "najstrmsi pocitadlo
    ]
    urobTu "celkovaTrasa :celkovaTrasa + prvok 1 :zaznam
  ]

  ;vypiseme celkovu prejdenu trasu
  pis (slovo "|Celková prejdená trasa: | :celkovaTrasa "| metrov|)

  ;zistime, ci na trase bolo stupanie, ak ano vypiseme poradie najstrmsieho useku
  ak2 :strmost>0 [
    pis (slovo "|Najstrmší úsek: | :najstrmsi)
  ][
    pis "|Na trase nebolo stúpanie|
  ]

koniec

Vaše zaujímavé riešenia a najčastejšie chyby

  • Polovica riešiteľov mala väčšinu algoritmu správne.  Chyby sa vyskytli (aj u ostatných) pri zisťovaní najväčšej strmosti.  Väčšinou išlo o použitie absolútnej hodnoty čo zarátalo do stúpavosti aj klesanie.
  • U ostatných riešiteľov išlo hlavne o nepochopenie úlohy, chybne určenú podmienku v cykle alebo nastavenie hodnoty premennej pri prechádzaní prvkov pola, čo zapríčinilo nesprávny výpočet celkovej dĺžky prejdenej trasy.