Autorské riešenie
Úlohou bolo nakresliť stromček bielej farby na tmavomodrom pozadí. Strom má náhodnú hrúbku kmeňa a ľubovoľný počet vetvičiek, ktoré sa však smerom k vrcholu stromu skracujú. Jedno z riešení by mohlo vyzerať napríklad tak, že začneme príkazmi na nastavenie farby pera a náhodnej hrúbky pera:
nechFarbaPozadia "modra
nechFP "biela nechHP 2 + nahodne 3 Nakresliť kmeň stromu tiež nebude ťažké, preto sa pozrime na to, ako by sme mohli nakresliť vetvičku. Zatiaľ len jednu. Zrejme využijeme základné príkazy korytnačky na pohyb dopredu, dozadu a jej otočenie. Aby sme však vedeli kresliť vetvičky rôznej dĺžky, vytvoríme si pre vetvičku samostatnú procedúru s parametrom, ktorý sa bude nazývať dĺžka vetvičky. Procedúra na vykreslenie vetvičky by mohla vyzerať napríklad takto:
viem vetvicka :dlzkaVetvicky
vl 135 do :dlzkaVetvicky vz :dlzkaVetvicky vl 90 do :dlzkaVetvicky vz :dlzkaVetvicky vl 135 koniec Teraz už zvládneme nakresliť vetvičku rôznej dĺžky. Ako ich však budeme rozmiestňovať pozdĺž kmeňa stromu? Zrejme bude potrebné vytvoriť medzeru, ktorú budeme dodržiavať medzi dvoma susednými vetvičkami. Pre veľkosť tejto medzery si môžeme vytvoriť premennú :medzera. Každý kmeň stromu je však vo svojej spodnej časti bez vetvičiek. Preto prvú vetvičku nakreslíme až vo vzdialenosti rovnej napríklad trojnásobku premennej :medzera, ako to môžeme vidieť na nasledujúcom obrázku. Zatiaľ teda vieme naprogramovať takúto časť procedúry strom:
viem strom :medzera
skry znova nechFarbaPozadia "modra nechFP "biela nechHP 2 + nahodne 3 do 3*:medzera vetvicka 50 koniec My by sme však chceli náhodný počet vetvičiek a aby sa vetvičky skracovali. Keďže chceme mať rozumnú dĺžku vetvičky, mala by mať aspoň dvojnásobnú hodnotu v porovnaní s hodnotou premennej :medzera. Skracovanie vetvičiek vykonáme tak, že dĺžku vetvičky po každom opakovaní vynásobíme náhodným číslom od 0,6 po 0,9. Vieme to naprogramovať napríklad takto:
urobTu "pocetVetviciek 3 + nahodne 5
urobTu "dlzkaVetvicky 2*:medzera + nahodne :medzera urobTu "skratenie (6 + nahodne 4)/10 opakuj :pocetVetviciek [ do :medzera vetvicka :dlzkaVetvicky urobTu "dlzkaVetvicky :skratenie*:dlzkaVetvicky ] Celá procedúra na vykreslenie stromu môže teda vyzerať napríklad takto:
viem strom :medzera
skry znova nechFarbaPozadia "modra nechFP "biela nechHP 2 + nahodne 3 urobTu "pocetVetviciek 3 + nahodne 5 urobTu "dlzkaVetvicky 2*:medzera + nahodne :medzera urobTu "skratenie (6 + nahodne 4)/10 do 3*:medzera opakuj :pocetVetviciek [ do :medzera vetvicka :dlzkaVetvicky urobTu "dlzkaVetvicky :skratenie*:dlzkaVetvicky ] vz 3*:medzera + :pocetVetviciek*:medzera koniec Vaše zaujímavé riešenia: Úlohu sa pokúsilo vyriešiť 19 tímov, objavilo sa viacero ďalších správnych a zaujímavých postupov:
Zaujímavé obrázky výtvorov súťažiacich si môžete pozrieť v galérii prác k tejto úlohe. Najčastejšie chyby a návrhy na vylepšenie:
| ||||||||||
© Univerzita Pavla Jozefa Šafárika v Košiciach, Prírodovedecká fakulta, Ústav informatiky palmaj (zavinac) upjs.sk |