Autorské riešenie
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.
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.
|
||||||||||
© Univerzita Pavla Jozefa Šafárika v Košiciach, Prírodovedecká fakulta, Ústav informatiky palmaj (zavinac) upjs.sk |