Autorské riešenie
[stiahni]

Pri riešení úlohy musíme, jednak pokosiť nepokosené políčka záhrady, t. j. vykresliť zelenou farbou zadaý počet políčok, a tiež vypočítať, na ktorom políčku zastala kosačka.

ihrisko

Záhradu pokosíme nasledovným spôsobom. Najprv vyfarbíme počiatočné políčko, na ktorom stojí kosačka (=korytnačka). Potom budeme opakovane zisťovať, či je políčko pred nami nepokosené (vyfarbené tmavozelenou farbou = "zelená3). Ak je nepokosené, tak ho pokosíme (vyfarbíme zelenou farbou). Ak máme pred sebou už pokosené políčko (vyfarbené zelenou farbou) alebo políčko mimo záhrady (vyfarbené bielou farbou), tak sa vrátime späť na políčko a otočíme sa vľavo o 90 stupňov. Tento postup môžme prepísať do programovacieho jazyka Imagine Logo nasledovne:

viem pokos :n
  ph
  nechFv "zelená
  výplň
  urobTu "krok 1

  kým [:krok<:n] [
    do :a
    ak2 farbaBodu="zelená3
      [výplň zvýš "krok]
      [vz :a vl 90]
  ]
koniec

Pre opakovanie sme nepoužili príkaz OPAKUJ, ale KÝM, lebo pri opakovaní robíme kroky nielen pri vyfarbovaní, ale aj pri zisťovaní, či je pred nami nepokosené políčko. Na počítanie vyfarbených políčok používame premennú "krok.

Tento program vyzerá, že bude správne fungovať. Čo však, ak zadáme počet krokov kosačky :n väčší ako celkový počet políčok :x * :y? Takýto program sa nám zacyklí, lebo po vykosení všetkých políčok nemôže dosiahnuť hodnotu :n. Preto v cykle KÝM namiesto podmienky [:krok<:n] uvedieme podmienku, v ktorej doplníme testovanie aj na porovnanie počtu krokov s celkovým počtom políčok, t. j.:
[zároveň :krok<:n :krok<:x*:y]

Po ukončení cyklu otestujeme, či bol cyklus ukončený z dôvodu presiahnutia celkového počtu krokov nad počtom políčok záhrady.

Okrem správneho vykosenia záhrady potrebujeme vypočítať pozíciu kosačky na konci kosenia. Jeden spôsob riešenia je taký, že si zapamätáme súradnice kosačky na začiatku kosenia a na konci kosenia. Potom tieto súradnice odpočítame a predelíme veľkosťou štvorcového políčka záhrady. Výsledný program riešiaci zadanie našej úlohy môže vyzerať nasledovne:

viem pokos :n
  urobTu "x0 xSúr
  urobTu "y0 ySúr

  ph
  nechFv "zelená
  výplň
  urobTu "krok 1

  kým [zároveň :krok<:n :krok<:x*:y] [
    do :a
    ak2 farbaBodu="zelená3
      [výplň zvýš "krok]
      [vz :a vl 90]
  ]

  ak :n>:x*:y [píš "|Počet krokov je viac ako políčok na trávniku|]

  urobTu "stlpec 1+(xSur-:x0)/:a
  urobTu "riadok 1+(ySur-:y0)/:a
  (píš :stlpec ".stlpec)
  (píš :riadok ".riadok)
koniec

Poznámka:
Kosačka je umiestnená v ľavom dolnom rohu obdlžníkovej záhrady. V našom riešení počítame stĺpce zľava doprava a riadky zdola nahor.

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

Úlohu riešilo 24 tímov. Aj keď úloha nevyzerala príloiš náročne, žiadnemu tímu sa nepodarilo získať plný počet bodov.

Najčastejšie chyby:

  • nebol ošetrený prípad, keď je zadaný väčší počet políčok ako má dané ihrisko (kosačka má viac benzínu ako potrebuje na vykosenie celej záhrady),
  • vypisovali ste číslo riadku a stĺpca korytnačky a nie posledného políčka, na ktorom kosenie skončilo,
  • v niektorých prípadoch korytnačka po dokosení ešte prešla o políčko ďalej bez kosenia,
  • nebolo dobre pochopené otáčanie sa korytnačky - po dokosení prvého riadku prešla do druhého riadku

Chválime:

  • Experta Richarda za jeho komentár navyše, z ktorej strany rátal číslo stĺpca a riadku,
  • Petra Ralbovského, ktorý ako jediný v svojom riešení ošetril prípad, keď je zadaný väčší počet políčok ako má dané ihrisko.