Autorské riešenie
Ak chceme vytvoriť program na vykreslenie vzoru výšivky uvedeného na obrázku, mali by sa najprv poriadne pozrieť na obrázok (Obr 1.) a nájsť v ňom časti, ktoré sa opakujú.
Obr 1. Vyšívka Na ďalšom obrázku (Obr 2.) vyznačujeme vzor, ktorý sa opakuje.
Obr 2. Vyšívka z vyznačením opakujúcich sa častí (vzory) Ak pozeráme dôslednejšie, tak aj v nájdenom vzore nájdeme ešte menší vzor, ktorý zrkadlovým obrazom druhej časti vzoru (pozri Obr 3.)
Obr 3. Menšia časť s vyznačením ešte menších časti (vzor) Pri ešte dôslednejšom pohľade vidíme, že aj tento vzor sa skladá z rovnakých menších častí (pozri Obr 4.)
Obr 4. Najmenšía časť obrázku (miniVzor) Po tomto viacnásobnom "röntgenovom" pohľade sa nám podarilo určiť časti, ktoré sa opakujú v obrázku a tiež časti, ktoré sú súčasťou iných častí. Teraz poďme z menších "tehličiek" skladať väčšie. Postupne budeme vytvárať procedúry na kreslenie - miniVzoru (Obr 4.), vzoru (Obr 3.) a vzorov (Obr 2.) MiniVzor budeme kresliť zo stredu. Procedúra miniVzor na jeho vykreslenie môže vyzerať, napr. takto: viem miniVzor :dlzka Procedúra vzor na vykreslenie vzoru (Obr 3.) môže vyzerať, napr. takto: viem vzor :dlzka Na posunutie sa na ďalšiu pozíciu miniVzoru použijeme procedúru posun, ktorá sa neposúva priamo v smere (pre tých, čo nepoznajú Pytagorovú vetu): viem posun :dlzka Na vykreslenie celej výšivky napíšeme procedúru vzory, v ktorej môžeme na začiatku ošetriť vstupné parametre, a tiež zabezpečiť návrat na pôvodné miesto kreslenia.
viem vzory :pocet :dlzka
; znova nechHp 5 vzory 3 40 ak (alebo :pocet<=0 :dlzka<=0 :pocet<>cela :pocet :dlzka<>cela :dlzka) [ pis "|Zadaj kladne cele cisla vstupov | ukonci ] vpravo 90 opakuj :pocet [ vzor :dlzka posun 4*:dlzka ] vpravo 180 posun 4*:pocet*:dlzka vpravo 90 koniec Táto súťažná úloha je zameraná na použitie stratégií riešenia problémov (rozlož problém do podproblémov, nakresli si obrázok) a tiež na výpočty vzdialeností, použitie príkazu opakovania a procedúr s parametrami. Vaše zaujímavé riešenia a najčastejšie chyby Do riešenia tejto úlohy sa zapojilo 25 tímov, z toho 10 tímov dosiahlo plný počet bodov (max 5 bodov). Celkový priemer úspešnosti riešení bol 3,44 bodov z maximálneho počtu 5 bodov (68,8% úspešnosť). Len tím ikztzu zabezpečil, že pri vykreslení výšivky sa korytnačka vráti na pôvodnú pozíciu, za čo ich chválime. Pri výpočte posunu medzi časťami obrázku 4 tímy použili matematickú funkciu omocnina/sqrt. Až v 12 riešeniach neboli použité procedúry na vykreslenie menších časti výšivky. Nedostatky, ktoré sme našli v riešeniach súťažiacich:
|
||||||||||
© Univerzita Pavla Jozefa Šafárika v Košiciach, Prírodovedecká fakulta, Ústav informatiky palmaj (zavinac) upjs.sk |