Autorské riešenie
[stiahni]

Prvým krokom riešenia úlohy je poriadne si prezrieť obrázok s koláčikom a nájsť v ňom nejaké pravidelnosti. V našom prípade sme našli vzor, ktorý sa opakuje - nepravidelný paťuholník. Výsledný obrázok koláčika dostaneme opakovaným posunutím a pootočením tohto vzoru a zmenou farby jeho vyplne, čo postupne zobrazuje animovaný obrázok. Opätovne animáciu môžme spustiť občerstvením tejto webovej stránky.

koláčik - animácia

Podrobnejším skúmaním obrázka môžme určiť veľkosti dĺžok a uhlov nepravidelného päťuholníka. Na základe zistenia rôznych súvislosti - v strede koláčika je pravidelný šesťuholník, uhol natočenia opakujúceho sa päťuholníka je 60 stupňov, dve dvojice strán päťuholníka sú rovnobežné ... môžeme napokon určiť vnútorné uhly päťuholníka (60, 120, 60, 60, 240) a dĺžky jeho strán (v pomere 1:3:2:1:2).

koláčik - vzor, ktorý sa opakuje

Pomocou doposiaľ zistených informácií vykreslíme koláčik opakovaným vykresľovaním vzoru nepravidelného päťuholníka určených rozmerov s posunutím sa o dlžku najkratšej strany päťuholníka a natočenia sa vpravo o uhol 60 stupňov. Farbu výplne päťuholníka budeme meniť pomocou počítadla, presnejšie pomocou jeho zvyškov po delení číslom 2 (tie sa budú striedať 0, 1, 0, 1, 0, 1). Jedno riešenie úlohy využívajúce príkaz výplň na vypĺňanie útvarov môže vyzerať nasledovne:

viem kolacik :dlzka :farba1 :farba2
 opakuj 6 [

    dopredu :dlzka
    vpravo 60
    dopredu 3*:dlzka
    vpravo 120
    dopredu 2*:dlzka
    vpravo 120
    dopredu :dlzka
    vľavo 60
    dopredu 2*:dlzka
    vzad :dlzka
    vpravo 60

    peroHore
    dopredu :dlzka/2
    ak2 zvyšok počítadlo 2=1 [
      nechFarbaVýplne :farba1
    ][
      nechFarbaVýplne :farba2
    ]
    výplň
    vzad :dlzka/2
    peroDolu
    vpravo 120
  ]
koniec

Iné riešenie úlohy využívajúce príkaz polygón na vypĺňanie útvarov môže vyzerať nasledovne:

viem kolacik2 :dlzka :farba1 :farba2
  opakuj 6 [
    ak2 zvyšok počítadlo 2=1 [
      nechFarbaVýplne :farba1
    ][
      nechFarbaVýplne :farba2
    ]

    polygón [
      dopredu :dlzka
      vpravo 60
      dopredu (3*:dlzka)
      vpravo 120
      dopredu (2*:dlzka)
      vpravo 120
      dopredu :dlzka
      vľavo 60
      dopredu (2*:dlzka)
    ]

    vpravo 60
    dopredu :dlzka
  ]
koniec

Pozor, pri použití príkazu polygón musíme uviesť výrazy v okrúhlych zátvorkách, a tiež si musíme uvedomiť, že po vykreslení päťuholníka pomocou príkazu polygón bude korytnačka vo východzej pozícii.

Úloha je zameraná na použitie stratégií riešenia problémov - najdi vzor, rozlož problém do podproblémov, nakresli si obrázok a tiež na výpočty s uhlami a použitie príkazov korytnačej grafiky, opakovania a vetvenia.

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

Do riešenia úlohy sa zapojilo až 31 tímov z oboch kategórií, z toho len 6 tímov vyriešilo túto úlohu na plný počet bodov (nnn, ikztzu, trollteam, becka, bavolar, svedi).

Vyskytli sa dva prístupy riiešenia tejto úlohy:

  • najprv vykreslenie obrysov koláčika a potom jeho vyfarbenie,
  • postupné vykresľovanie vyfarbených častí koláčika.

Je zaujímavé, že len v 4 riešeniach použili súťažiaci na vyfarbovanie príkaz POLYGÓN. V 10 riešeniach súťažiaci použili na vykreslenie vzoru vlastnú procedúru, čo značne sprehľadnilo čitateľnosť riešenia. V jednom riešení sa objavilo vlastné grafické prostredie úlohy so vstupnými textovými poľami a posúvačom.

Nedostatky, ktoré sme našli v riešeniach súťažiacich:

  • Pri vykresľovaní výplne časti koláčika použili súťažiaci pri posúvaní sa do vyplňacej oblasti posun o absolútny počet krokov, napr. 2, 5, 10 a aj viac. Toto spôsobilo, že pri niektorých hodnotách veľkosti koláčika sa nesprávne vykreslila jeho výplň. Pri vypĺňaní útvarov odporúčame pri použití príkazu VÝPLŇ posúvať sa o vzdialenosť odvodenú od veľkosti koláčika alebo ešte lepšie je použiť príkaz POLYGÓN.
  • Až v 12 z 31 riešení súťažiaci nepoužili parametre procedúry, čo môže indikovať, že sa do súťaže zapojili aj menej skúsení programátori. Veríme, že v druhom kole počet takýchto riešení klesne.
  • V zriedkavých prípadoch boli nepresne vypočítané rozmery opakujúceho sa vzoru.
  • Niektoré riešenia boli veľmi komplikované a neprehľadné, často súťažiaci opakovali rovnaké časti kódu namiesto použitia príkazu opakovania a procedúry, či príkazu vetvenia na striedavú zmenu farby opakujúceho sa vzoru.
  • V 6 riešeniach sa počas vykresľovania viackrát objavil príkaz DOMOV, ktorý zužuje riešenie úlohy len na viazanie sa na domovskú pozíciu korytnačky.
  • V jednom prípade sa vyskytla operácia vstupu ČÍTAJSLOVO na zistenie farieb koláčika, pričom veľkosť koláčika bola jediným parametrom procedúry. Odporúčame vstupy procedúry riešiť jednotným spôsobom, a to najlepšie pomocou jej parametrov.
  • V 3 riešeniach súťažiaci použili globálne premenné namiesto lokálnych premenných.
  • Odporúčame autorom, aby v budúcnosti v svojich riešeniach použili nie jednopísmenkové ale viachovoriace názvy premenných a tiež dôslednejšie odsadzovali príkazy pri použití príkazov opakovania, vetvenia, atď.