Autorské riešenie
[stiahni py]

  • Počet riešiteľov: 13 / 17 = 76  %

  • Úspešnosť riešenia:  4.38 / 5 = 88 %

Riešenie úlohy o vykresľovaní medovníkov pozostáva z dvoch po sebe nasledujúcich častí. Prvou časťou je vykreslenie vyfarbeného rovnostraného trojuholníka. Druhá časť pozostáva z vykreslenia vyfarbených kruhov po obvode trojuholníka. Vyfarbené kruhy sa navzájom dotýkajú. Keďže trojuholník má byť v pozadí medovníka, je vhodné vykresliť ho ako prvý. Dôležité je určiť vzťah medzi rozmermi strán trojuholníka a rozmermi kruhov. Z nasledujúceho obrázku môžeme vidieť, že dĺžku strany trojuholníka môžeme vypočítať napríklad pomocou nasledujúceho vzťahu:

dĺžka_strany_trojuholníka = (počet_kruhov - 1)*veľkosť_kruhu.

Veľkosťou kruhu budeme rozumieť jeho priemer, teda dvonásobok jeho polomeru.

trojuholnik

Ak už poznáme tento vzťah, môžeme vytvoriť funkciu s dvoma vstupnými parametrami (počet_kruhov a veľkosť_kruhu). Funkcia najprv vykreslí rovnostranný trojuholník so stranou, ktorej dĺžka je vypočítaná pomocou uvedeného vzťahu a následne už vieme po jeho obvode rozmiestniť kruhy, ktoré sa navzájom dotýkajú.

Je potrebné si uvedomiť, že aj keď na každej strane trojuholníka budeme mať zadaný počet kruhov (parameter počet_kruhov), pri ich umiestňovaní po obvode trojuholníka postačí nakresliť na každú z troch strán len počet kruhov zmenšený o jeden (počet_kruhov-1). Využijeme skutočnosť, že jeden kruh má každá dvojica susedných strán trojuholníka spoločný.

Návod na vyfarbenie obrysov útvarov, ktoré nakreslí korytnačka, bol súčasťou pomôcky v zadaní. Všimnime si, že kruh vieme vyfarbiť aj bez tohto postupu s využitím príkazu pero.dot(velkost, farba) s dvoma parametrami.

Nasleduje možný zdrojový kód v jazyku Python

# Python
def kresli_medovnik(pocet, velkost):
    # medovnikove cesto ako trojuholnik
    pero.fillcolor('chocolate4')
    pero.begin_fill()
    for i in range(3):
        pero.forward((pocet - 1) * velkost)
        pero.left(120)
    pero.end_fill()

    # cukrove kruzky po obvode
    for i in range(3):
        for j in range(pocet - 1):
            pero.dot(velkost, 'lightpink')
            pero.forward(velkost)
        pero.left(120)

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

Úlohu riešilo 13 tímov. Väčšina tímov použila správny postup na dosiahnutie vhodného riešenia a využilo postup uvedený v autorskom riešení. Niektorí prišli na to, že ak pri vykresľovaní kruhov necháme zapnuté pero korytnačky, môžeme súčasne kresliť kruhy a tiež trojuholník, ktorý sa vyfarbí po dokončení celého obrysu trojuholníka. Vhodným nastavením postupnosti príkazov je možné dosiahnuť to, že trojuholník bude takto tiež vykreslený v pozadí. Viaceré riešenia boli výborne okomentované. V niektorých riešeniach chýbali vstupné parametre funkcie, a teda úloha bola vyriešená len pre istý počet kruhov a ich veľkosť. V niektorých riešeniach bola vstupným parametrom dĺžka strany trojuholníka a to mohlo pri zaokrúhľovaní spôsobiť, že kruhy sa vo výslednom medovníku nedotýkali.