Autorské riešenie
Cieľom tejto úlohy je nakresliť ozdobný vzor na šál podľa zadanej dĺžky vzoru a šírky šálu. Nasledujúce obrázky znázorňujú tento ozdobný vzor.
Je ľahké všimnúť si, že vo vzore na šále sa pravidelne opakuje štvorec, ktorý je otočený o 45° vzhľadom na celý vzor. Pri kreslení štvorcov z ľava do prava má každý ďalší štvorec ľavý vrchol v strede predchádzajúceho štvorca. Dĺžka vzoru je určená počtom štvorcov vo vzore. Vytvoríme si pomocnú procedúru/funkciu pre kreslenie stvorca. Aby sme si uľahčili kreslenie celého vzoru, budeme samotný štvorec kresliť pootočený. ;Imagine logo
viem otoceny_stvorec :velkost vl 45 opakuj 4 [ do :velkost vp 90 ] vp 45 koniec #Python def otoceny_stvorec(strana): k.left(45) for i in range(4): k.forward(strana) k.right(90) k.right(45) Jedným z parametrov pre kreselnie vzoru na šále je šírka šálu. Šál je taký široký, aká dlhá je uhlopriečka štvorca, čo vidieť na nasledujúcom obrázku.
Aby sme vedeli využíť procedúru/funkciu pre kreslenie štvorca, potrebujeme vypočítať dĺžku strany štvorca. Uhlopriečka rozdeľuje štvorec na 2 pravouhlé rovnoramenné trojuholníky, pričom uhlopriečka je ich preponou. Použiutím Pytagorovej vety vieme vypočítať dĺžku strany štvorca nasledovne:
Dĺžka celého vzoru je určená počtom štvorcov v ňom. Stačí teda v cykle kresliť otočené štvorce a posúvať sa o polovicu uhlopriečky štvorca, t.j. o polovicu šírky šálu. Každý ďalší štvorec začína v strede uhlopriečky toho predchádzajúceho.
Výsledná verzia procedúry/funkcie pre kreslenie vzoru môže vyzerať nasledovne: ;Imagine logo
viem sal :sirka_salu :dlzka_vzoru urobTu "strana_stvorca :sirka_salu / odmocnina 2 opakuj :dlzka_vzoru[ pd otoceny_stvorec :strana_stvorca ph do :sirka_salu / 2 ] vz :dlzka_vzoru * :sirka_salu / 2 koniec #Python def sal(sirka_salu, dlzka_vzoru): strana_stvorca = sirka_salu / 2 ** 0.5 for i in range(dlzka_vzoru): k.pendown() otoceny_stvorec(strana_stvorca) k.penup() k.forward(sirka_salu / 2) k.backward(dlzka_vzoru * sirka_salu / 2) Po vykreslení celého vzoru je vhodné vrátiť korytnačku naspäť na pôvodné miesto. V cykle sme sa posúvali o vzdialenosť sirka_salu / 2 celkovo dlzka_vzoru krát. Vaše zaujímavé riešenia a najčastejšie chyby Túto úlohu riešilo 26 tímov, z toho 12 tímov v jazyku Imagine a 14 tímov v jazyku Python, pričom v jazyku Python bola úspešnosť len o 0,04% vyššia. Celkovo hodnotíme túto úlohu za úspešnú a dobre zvládnutú. Všetky tímy kreslili opakujúce sa štvorce. Riešenia boli rôzne. 2 tímy kreslili štvorce zľava doprava. 7 tímov riešilo túto úlohu cez posuny polovičnej dĺžky strany štvorca - ako je 2. vzorové riešenie. 14 tímov riešilo túto úlohu cez posun po uhlopriečke, ktorý počítali cez odmocninu, resp. použili násobenie číslom 1,42, čo síce je približne odmocnina z 2, avšak pri väčších rozmeroch šálu toto zaokrúhlenie spôsobuje viditeľné nepresnosti v kreslení. Takmer polovica tímov používala parameter šírka ako dĺžka strany štvorca. Aj takýto variant riešenia sme uznali bez straty bodov, aj keď sa nejedná priamo o šírku šálu. Niekoľko tímov nepoužilo parametre vôbec, prípadne použili len jeden parameter a druhý podľa neho dopočítavali, alebo ho nechali ako konštantu. Trom tímom sa nepodarilo naprogramovať rovnaký vzor ako v zadaní, čo spôsobili nesprávne posuny medzi štvorcami. Medzi ďalšie chyby, ktoré sa opakujú takmer v každej úlohe, ale nepovažujeme ich za menej dôležité patrí používanie globálnych premenných na miestach, kde úplne stačia lokálne premenné. Je pravdepodobné, že väčšina tímov nerozumie správne významu a použitu procedúry, resp. funkcie, a vo väčšine riešení korytnačka skončí na mieste a v otočení takom, ako skončila svoje vykonávanie a chýba jej vrátenie sa na počiatočné miesto a otočenie do počiatočného smeru, čo je možné vidieť aj v galérií k tejto úlohe. Okrem toho používajú v procedúre/funkcii príkazy "domov", "zmaž", "znovu". Vyskytli si aj nesprávne pomenovania procedúry/funkcie alebo súboru. |
||||||||||
© Univerzita Pavla Jozefa Šafárika v Košiciach, Prírodovedecká fakulta, Ústav informatiky palmaj (zavinac) upjs.sk |