„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ę RABATA :ilek :ilep, po wywołaniu której na ekranie powstanie rysunek rabaty kwiatowej utworzonej z fioletowych kwiatków na zielonych łodyżkach. Długość krótszej łodygi wynosi 115, a dłuższej 230. Parametr :ilek oznacza liczbę długich łodyżek i może przyjmować wartości od 1 do 5. Parametr :ilep oznacza liczbę płatków kwiatka oraz liczbę ząbków w płatku i może przyjmować wartości od 2 do 9. Odległość między skrajnymi łodygami wynosi 460. Zależności między długościami odcinków odczytaj z rysunku pomocniczego.
Rozwiązanie:
oto RABATA :ilek :ilep cs pod niech "bok (((460/(:ilek*2))/8)*3)/:ilep niech "a 460/(:ilek*2) ws (230+:bok*:ilep)/2 lw 90 np 460/2 pw 90 opu powtórz :ilek [oba :bok :a :ilep] kwiat 0 :bok :ilep już =================================================== oto dl :a :ile :ilep kwiat 1 :a :ilep pw 90 np :ile lw 90 już =================================================== oto kr :a :ile :ilep kwiat 0 :a :ilep pw 90 np :ile lw 90 już ==================================================== oto kwiat :a :bok :ile ukp "zielony jeśli :a=0[np 115] jeśli :a=1[np 230] pak :bok :ile ukp "zielony jeśli :a=0[ws 115] jeśli :a=1[ws 230] już ==================================================== oto oba :a :ile :ilep kr :a :ile :ilep dl :a :ile :ilep już ==================================================== oto pak :a :ile ukp "fioletowy ukm "fioletowy jeśli reszta :ile 2=0[lw 360/:ile/2] powtórz :ile [ np :a pw 90 powtórz :ile [ pojel :a] pw 90 np :a*(:ile+1) lw 180 pw 360/:ile ] jeśli reszta :ile 2=0[pw 360/:ile/2] już ==================================================== oto pojel :a ws :a/2 wielokąt [np :a lw 30 np :a lw 120 np :a lw 30 np :a lw 30 np :a lw 120 np :a lw 30] lw 90 np :a pw 90 np :a/2 już
Wynik działania programu: