„miniLOGIA grafika w Logo” to konkurs informatyczny dla uczniów szkół podstawowych województwa mazowieckiego organizowany przez Ośrodek Edukacji Informatycznej i Zastosowań Komputerów (OEIiZK) na zlecenie Mazowieckiego Kuratora Oświaty. Konkurs składa się z trzech etapów, podczas których uczniowie samodzielnie rozwiązują zadania graficzne w językach Logo lub Python (z zainstalowanym modułem turtle).
W serii artykułów przedstawię rozwiązania zadań w języku Logo, opracowane przeze mnie podczas przygotowywania się do konkursu. Jako środowisko, w którym opracowywałem rozwiązania zadań wykorzystałem zalecane przez organizatora oprogramowanie Logomocja-Imagine.
Zadanie 3
Napisz procedurę DRZEWO :ile :dl, po wywołaniu której będzie rysowane drzewo takie, jak na rysunkach. Każde drzewo składa się z pnia, jednego liścia na czubku oraz podanej wysokości. Parametr :ile oznacza wysokość drzewa, może on zmieniać się w zakresie od 8 do 15. Gałęzie na pierwszym poziomie od dołu są rysowane według następujących zasad: z prawej strony pnia jest gałąź o długości 1, z lewej strony gałąź ma losową długość. Najkrótsza taka gałąź składa się z dwóch liści, najdłuższa z :dl liści. Parametr :dl może zmieniać się w zakresie od 2 do 8. Kolejne gałęzie układają się przeciwnie do poprzednich, na przykład na drugim poziomie gałąź losowa jest z prawej strony, ta o długości 1 z lewej strony. I tak kolejno. Drzewo powinno być narysowane na środku ekranu, jego wysokość wynosi, co najmniej 400.
Rozwiązanie:
oto drzewo :ile :dl cale :ile :dl już =================================================== oto cale :ile :dl niech "wys 450 niech "bok :wys/(:ile+2) cs pod ws :wys/2 pien :bok korona :ile :dl :wys wróć już =================================================== oto kawl :bok pod lw 90 np :bok pw 90 niech "bok :bok/4 niech "ile 4 ukp "czarny kwl :bok*:ile niech "ile :ile-1 ukp "zielony kwl :bok*:ile niech "ile :ile-1 ukp "czerwony kwl :bok*:ile niech "ile :ile-1 ukp "żółty kwl :bok*:ile niech "ile :ile-1 już =================================================== oto kawp :bok pod pw 90 np :bok lw 90 niech "bok :bok/4 niech "ile 4 ukp "czarny kwp :bok*:ile niech "ile :ile-1 ukp "zielony kwp :bok*:ile niech "ile :ile-1 ukp "czerwony kwp :bok*:ile niech "ile :ile-1 ukp "żółty kwp :bok*:ile niech "ile :ile-1 już =================================================== oto korona :ile :dl :wys niech "bok :wys/(:ile+2) niech "dl :dl-2 jeżeli reszta(:ile) 2=0 [ powtórz :ile/2 [warp (losowa :dl)+2 :bok warl (losowa :dl)+2 :bok] kawp :bok ] [ powtórz :ile/2-0.5 [warp (losowa :dl)+2 :bok warl (losowa :dl)+2 :bok] warp (losowa :dl)+2 :bok kawp :bok] już =================================================== oto kwl :bok wielokąt [powtórz 4 [np :bok pw 90]] już =================================================== oto kwp :bok wielokąt [powtórz 4 [np :bok lw 90]] już =================================================== oto pien :bok ukp "czarny lw 90 niech "bok :bok/4 np :bok pw 90 wielokąt [powtórz 2 [np (:bok*4) pw 90 np (:bok*2) pw 90]] np :bok*4 lw 90 np :bok*3 pw 90 wielokąt [powtórz 2 [np :bok pw 90 np (:bok*8) pw 90]] pw 90 np :bok*4 lw 90 np :bok już =================================================== oto rzadl :ile :bok powtórz :ile [kawl :bok] pw 90 np :bok*:ile lw 90 już =================================================== oto rzadp :ile :bok powtórz :ile [kawp :bok] lw 90 np :bok*:ile pw 90 już =================================================== oto warl :ile :bok rzadl 1 :bok rzadp :ile :bok np :bok już =================================================== oto warp :ile :bok rzadp 1 :bok rzadl :ile :bok np :bok już
Wynik działania programu:
DRZEWO 8 7