Autorské riešenie
Úlohou bolo vytvoriť takú procedúru, ktorej keď zadám do vstupu (prirodzené) číslo, tak vykreslí strom podľa predpísaných požiadaviek s daným počtom vetvičiek. Dôležité teda bolo definovať si nejaký vstupný parameter pre našu procedúru. My sme použili premennú s názvom pocetVetiev. Samotné kreslenie je potom možné rozdeliť do dvoch fáz: kreslenie kmeňa stromu a kreslenie vetvičiek. Niektorí z riešiteľov si nevšimli, že kmeň je za vetvičkami schovaný, čo spôsobilo, že stratili bod. Pozrime sa teda na tieto dve fázy postupne: Kmeň stromu Pri kreslení kmeňa je dôležité správne určiť jeho dĺžku. Medzi každými dvoma vetvičkami je 30 krokov a v časti pod poslednou vetvičkou je 60 krokov. Výšku kmeňa teda vieme ľahko vypočítať ako: (pocetVetiev*30)+30. Zo zadania bolo dané, že hrúbka pera má byť nastavená na 10 a farba pera na hnedú. Kód na vykreslenia kmeňa by teda mohol vyzerať nasledovne: ;Imagine
logo
viem kresliStrom :pocetVetiev nechfp "hneda nechhp 10 do (pocetVetiev*30)+30 koniec
#Python def kresliStrom(pocetVetiev): turtle.pendown() turtle.pensize(10) turtle.left(90) turtle.color('brown') turtle.forward(30 + 30 * pocetVetiev) Keď máme nakreslený strom, môžeme sa pustiť do kreslenia vetvičiek. Na nakreslenie vetvičky zadanej dĺžky sme si vytvorili pomocnu proceduru vetva. V tejto procedúre sa nastaví farba pera korytnačky na zelenú, následne korytnačka nakreslí jednu časť vetvy a hneď za tým druhú časť vetvy. Obe časti vetvy majú rovnaký uhol medzi vetvou a kmeňom. Na veľkosti zvoleného uhla nezáležalo. My sme si zvolili 60 stupňový uhol. Procedúra na kreslenie vetvy zadanej dĺžky by mohla vyzerať takto: ;Imagine
logo
viem vetva :dlzkaVetvy nechfp "zelena pd vl 120 do :dlzkaVetvy do -:dlzkaVetvy vp 240 do :dlzkaVetvy do -:dlzkaVetvy vl 120 koniec
#Python def vetva(dlzkaVetvy): turtle.pendown() turtle.color('green') turtle.left(120) turtle.forward(dlzkaVetvy) turtle.backward(dlzkaVetvy) turtle.right(240) turtle.forward(dlzkaVetvy) turtle.backward(dlzkaVetvy) turtle.left(120) Teraz už len potrebujeme zakomponovať rpocedúru na kreslenie vetiev do procedúry kresliStrom, ktorá nám zatiaľ vykreslila iba kmeň. V prvom rade si vytvoríme premennú, v ktorej si budeme pamätať, akú dlhú vetvičku máma nakresliť. Veľkosť vetvičky sa zvyšuje o 5 krokov smerom k dolným vetvičkám. Teda nižšia vetva je o 5 krokov dlhšia ako jej horná suseda. My sme si zvolili premennú dlzkaVetvy, do ktorej si na začiatku uložím číslo 30 - keďže najvrchnejšia vetva má mať dĺžku 30 krokov. Teraz použijem príkaz opakuj,pretože potrebujem nakresliť vetvičku presne toľko krát, koľko mi udáva číslo v premennej pocetVetiev. V každej iterácii cyklu nakreslím vetvu (pomocou porcedúry vetva) s dĺžkou, ktorú mám aktuálne uloženú v premennej dlzkaVetvy a potom zvýšim číslo v premennej dlzkaVetvy o 5 krokov. Celá procedúra kresliStrom potom vyzerá nasledovne. ;Imagine
logo
viem strom :pocetVetiev znovu pd nechFarbaPera "hneda nechhp 10 do 30*:pocetVetiev do 30 urobTu "dlzkaVetvy 30 opakuj :pocetVetiev [ vetva :dlzkaVetvy ph do -30 urobTu "dlzkaVetvy :dlzkaVetvy+5 ] koniec
#Python def kresliStrom(pocetVetiev): turtle.pendown() turtle.pensize(10) turtle.left(90) turtle.color('brown') turtle.forward(30 + 30 * pocetVetiev) dlzkaVetvy = 30 for i in range(0, pocetVetiev): vetva(dlzkaVetvy) turtle.penup() turtle.backward(30) dlzkaVetvy = dlzkaVetvy + 5 Vaše zaujímavé riešenia a najčastejšie chyby Najčastejšie sa stávalo, že riešitelia nakreslili kmeň stromu tak, že čiastočne alebo úplne prekrýval vetvičky. Tiež sa objavilo niekoľko nepozorností pri práci s dĺžkami kmeňa, či vetiev. Zaujímavé riešenie zvolil jeden z tímov, ktorý sa vybral cestou rekurzívneho prístupu. |
||||||||||
© Univerzita Pavla Jozefa Šafárika v Košiciach, Prírodovedecká fakulta, Ústav informatiky palmaj (zavinac) upjs.sk |