Autorské riešenie
Pri algoritmickom riešení budeme postupovať podobne ako pri skutočnom tkaní koberca: začneme od stredu a postupne budeme pokračovať až do potrebnej veľkosti koberca. Pre vytvorenie pohybu korytnačky si predstavíme pohyb obvode točitého schodiska, teda budeme opakovať malý krok s otočením o malý uhol stále do tej istej strany (napríklad vždy o 5 stupňov vpravo). Čím menší uhol zvolíme, tým bude špirála jemnejšia a plynulejšia. Ak by sme kroky robili stále rovnako malé, pohybovali by sme sa stále dookola, preto ak chceme dosiahnuť postupne sa odvíjajúcu špirálu, musíme aj kroky postupne zväčšovať vždy o rovnaký malý prírastok (napríklad o 0.02 kroku). Začneme teda v strede nulovým krokom a opakujeme pohyb dovtedy, pokiaľ posledný krok už nebude presahovať stanovenú maximálnu dĺžku.
Najprv si teda nastavíme najväčšiu dovolenú dĺžku a hrúbku priadze (= hrúbku pera) a nastavíme počiatočný krok na nulu. Ďalej už len opakujeme postupné zväčšenie kroku, výber náhodnej farby zo vstupného zoznamu farieb, pohyb vpred o daný krok a otočenie o daný malý uhol. Aby sme splnili podmienky správneho tkania (podľa zadania úlohy), musíme vyladiť hodnoty uhla otočenia, hrúbky a dĺžky čiary.
;Imagine
logo
viem procedura tkanie :farby urobTu "dlzka 12 urobTu "hrubka 15 nechHp :hrubka urobTu "krok 0 kym [:krok < :dlzka] [urobTu "krok :krok+0.02 nechFp ?prvok :farby do :krok vp 5] koniec
Python
import turtle Vaše zaujímavé riešenia a najčastejšie chyby Špirálu je možné vykresliť aj pomocou rekurzie, kde rekurzívne voláme funkciu na tkanie menších častí špirály, čo je však v tomto prípade nie úplne efektívne riešenie - išlo nám o naprogramovanie stroja na tkanie kobercov a ak by sme ho naprogramovali, aby začínal od vonkajšieho obvodu koberca a pokračoval až do stredu, v praxi by to bolo ťažko realizovateľné. Z programátorského hľadiska v prípade Imagine Loga nie je s vnáraním do rekurzie problém, pri Pythone je však hĺbka vnorenia obmedzená a program skončí s chybou. Problém môže nastať aj s vytváraním zoznamu farieb pri rekurzívnom volaní - pokiaľ funkcii dáme ako parametre len jednotlivé farby (nie ich zoznam) a z nich v rámci funkcie vytvoríme zoznam, pri rekurzívnom volaní vytvárame tento zoznam stále nanovo (podľa hĺbky vnorenia to môže byť aj niekoľko stokrát!). Medzi najčastejšie chyby pri riešení tejto úlohy patrí zbytočné používanie globálnych premenných (na riešenie postačia lokálne premenné), nestriedanie farieb alebo pravidelné striedanie farieb (pri opakovanom tkaní nevzniknú koberce s originálnym , unikátnym vzorom, ale len stále tie isté farebné vzory), nesúvislá špirála (pri použití bodov namiesto čiarových úsekov sa so zväčšujúcim krokom body začnú od seba vzďaľovať) a nedokreslenie špirály až do stredu (v strede koberca zostane po ukončení tkania veľká diera - taký koberec by sme si asi kúpiť nechceli...). Úplne zbytočnou chybou bolo nedočítanie celého zadania - riešenie malo byť odovzdané v súbore s presne špecifikovaným názvom v zadaní úlohy - koberce.imp alebo koberce.py. |
||||||||||
© Univerzita Pavla Jozefa Šafárika v Košiciach, Prírodovedecká fakulta, Ústav informatiky palmaj (zavinac) upjs.sk |