Strona główna » Poradniki » Logomocja » LOGIA » Logia 2000/01 - Etap I
 

Logia 2000/01 - Etap I

· Etap I · Etap II · Etap III ·
iOryginalna treść zadań jest dostępna pod oficjalnym adresem konkursu LOGIA

Zadanie 1

Napisz procedurę BOMBKA :r, która tworzy rysunek bombki w postaci ciemno niebieskiej tarczy koła o danym promieniu :r z wpisaną w koło złotą pięcioramienną gwiazdą, tak jak na rysunku.

Gwiazda

Rysowanie żółtej gwiazdki okaże się przydatne nie tylko w pierwszym zadaniu, ale również w drugim. W celu uproszczenia jej rysowania warto napisać dodatkową procedurę gwiazdka, która będzie przyjmowała jeden argument :r. Określi on do koła o jakim promieniu powinna się mieścić gwiazdka. Szczególnie przypadkie w przypadku zadania 1. Procedura będzie też kierować jeden z czubków gwiazdki zawsze do góry. Ta właściwość będzie przydatna przy używaniu procedury w zadaniu 2.

  1. oto gwiazdka :r
  2.   niech "kat 36
  3.   niech "stala 1.376819
  4.   niech "kier kierunek
  5.   niech "a :r/:stala
  6.   pod
  7.   skieruj 0
  8.   np :r
  9.   pw 180
  10.   opu

(2.) Kąt w wierzchołku gwiazdy pięcioramiennej wynosi 36 stopni. (3.) Procedura będzie rysowała gwiazdę tak, aby jej środek znalazł się tam gdzie był pisak w momencie wywołania procedury. :stala jest wyliczoną matematycznymi wzorami stałą, która pozwala dokładnie wyśrodkować rysunek. (4.) Zapamiętanie kierunku rysowania żółwia. (5.) Obliczenie odległości do czubka gwiazdy. (6. - 10.) Przesunięcie do czubka i ustawienie przekręcenia gwiazdki na 0.

  1.   ukp "żółty
  2.   wielokąt [
  3.     ukm "żółty
  4.     powtórz 5 [
  5.       lw (:kat / 2)
  6.       np :a
  7.       lw (90 - :kat / 2)
  8.       np :a
  9.       pw (180 - :kat / 2)
  10.     ]
  11.   ]
  12.   pod
  13.   np :r
  14.   ukp "czarny
  15.   skieruj :kier
  16.   opu
  17. już

(11.) Ustalenie koloru pisaka i (12. - 20.) narysowanie gwiazdki. (14.) Gwiazda składa się z pięciu identycznych części, który kąt rozwarcia w tym przypadku to :kat. (21. - 25.) Powrót do miejsca rozpoczęcia rysowania, przywrócenie czarnego pisaka i skierowania żółwia w odpowiednią stronę.

Bombka

Posiadając procedurę gwiazdka narysowanie bombki staje się bardzo proste i wymaga zaledwie kilku linijek:

  1. oto BOMBKA :r
  2.   ukp "ciemnoniebieski3
  3.   kropka 2*:r
  4.   ukp "czarny
  5.   gwiazdka :r
  6. już

Zadanie 2

Artykułom w Gazecie Wyborczej o postępach Polski na drodze do Unii Europejskiej często towarzyszy znak graficzny podobny do tego na rysunku poniżej. Zdefiniuj procedurę o nazwie SDU (schody do unii), która tworzy na środku ekranu monitora taki znak.

Rozwiązanie tego zadania polega na rysowaniu jednego elementu naraz. Użycie pętli oraz funkcji gwiazdka pozwala na zaoszczędzenie czasu podczas pisania kodu. Prezentowane długości poszczególnych części obrazków są jedynie zbliżone do oryginalnych.

  1. oto SDU
  2.   niech "h 480
  3.   niech "margin 12
  4.   niech "schodek (:h - 2*:margin) / 11
  5.   pod
  6.   ws :h/2
  7.   pw 90
  8.   ws :h/2
  9.   lw 90
  10.   opu

(2.) Ustalenie maksymalnej wysokości rysunku. (3.) Ustalenie szerokości szarej obwódki. (4.) Ustlanie wysokości pojedynczego schodka. (5. - 10.) Przesunięcie żółwia do lewej dolnej części rysunku.

  1.   ukp "szary10
  2.   wielokąt [
  3.     ukm "szary10
  4.     powtórz 4 [
  5.       np :h
  6.       pw 90
  7.     ]
  8.   ]

(11. - 18.) Narysowanie szarej obwódki.

  1.   ukp "biały
  2.   powtórz 2 [
  3.     np :h
  4.     pw 90
  5.   ]
  6.   ukp "czarny
  7.   powtórz 2 [
  8.     np :h
  9.     pw 90
  10.   ]
  11.   pod
  12.   np :margin
  13.   pw 90
  14.   np :margin
  15.   lw 90
  16.   opu

(19. - 28.) Na obrazku można zauważyć biało czarna obwódkę dookoła rysunku ma to na celu dodanie wrażenia wypukłości obrazka. (29. - 34.) Po narysowaniu obwódki należy przejść do lewej dolnej części ciemnoniebieskiego kwadratu.

  1.   ukp "ciemnoniebieski4
  2.   wielokąt [
  3.     ukm "ciemnoniebieski4
  4.     powtórz 4 [
  5.       np (:h - 2*:margin)
  6.       pw 90
  7.     ]
  8.   ]
  9.   pod
  10.   pw 90
  11.   np :schodek
  12.   lw 90
  13.   opu

(35. - 42.) Narysowanie ciemnoniebiekiego kwadratu i (43. - 47.) Przesunięcia w lewy dolny róg pierwszego schodka.

  1.   powtórz 5 [
  2.     niech "n npw
  3.     ukp "błękitny
  4.     wielokąt [
  5.       ukm "błękitny
  6.       powtórz 2[
  7.         np :schodek
  8.         pw 90
  9.         np (:schodek * (10 - :n))
  10.         pw 90
  11.       ]
  12.     ]
  13.     wielokąt [
  14.       ukm "biały
  15.       powtórz 2[
  16.         np (:schodek * 0.9)
  17.         pw 90
  18.         np (:schodek * 5)
  19.         pw 90
  20.       ]
  21.     ]
  22.     pod
  23.     np :schodek
  24.     pw 90
  25.     np :schodek
  26.     lw 90
  27.     opu
  28.   ]

(48.) Narysuj pięć schodków. (49.) Zapamiętaj numer rysowanego schodka. (50. - 59.) Podczas rysowania schodka. W każdej iteracji (56.) wylicz nową długość schodka na podstawie zapamiętanego numeru powtórzenia. (60. - 68.) Rysowanie białego stopnia na schodku jest prostsze, ponieważ ma stałą długość. Należy jednak pamiętać, aby zmniejszyć nieco jego wysokość. Ponadto specjalnie nie został zmieniony kolor pisaka, aby pasował do koloru malowania, ponieważ w ten sposób istnieje dodatkowa obwódka w kolorze schodów. (69. - 74.) Przejdź do rysowania następnego schodka.

  1.   pod
  2.   pw 90
  3.   np :schodek * 3
  4.   lw 90
  5.   np :schodek * 3
  6.   lw 150
  7.   ukp "czarny
  8.   powtórz 8 [
  9.     np :schodek * 2
  10.     gwiazdka 4 + 1.5 * npw
  11.     pod
  12.     ws :schodek * 2
  13.     pw 30
  14.   ]
  15.   opu

Ostani etap rysowania SDU polega na (76. - 81.) ustawieniu żółwia mniej więcej w środku okręgu, który zawiera środki gwiazdek. (82. - 89.) Narysowanie ośmiu gwiazdek z uwzględnieniem faktu, aby każda kolejna była większa od poprzedniej. Bardzo ważne, aby pamiętać o zresetowaniu zmienianych ustawień żółwia poprzez (82.) ustalenie czarnego pisaka i (90.) opuszczenie pisaka.

Zadanie 3

Poniższy rysunek przedstawia motyw dekoracyjny zaczerpnięty ze sztuki zdobniczej Majów. Napisz procedurę bez parametrów ALFA, która rysuje na ekranie taki wzór.

Strategia

W zadaniu należy zauważyć, że obrazek składa się z 12 identycznych elementów, a każdy z tych elementów z czterech takich samych części każda kolejna obrócona w prawo. Ze względu na drobne skomplikowanie elementu warto napisać procedurę pomocniczą ALFA_pom, która będzie rysowałą jedną z czterech części danego elementu.

  1. oto ALFA_pom :a
  2.   powtórz 2 [
  3.     np :a * 6
  4.     pw 90
  5.   ]
  6.   np :a * 5
  7.   pw 90
  8.   powtórz 5 [
  9.     np :a * (6 - npw)
  10.     pw 90
  11.     np :a * (6 - npw)
  12.     ws :a
  13.     pw 90
  14.   ]
  15.   pod
  16.   ws :a * 3
  17.   lw 90
  18.   ws :a * 3
  19.   opu
  20. już

(1.) Procedura przyjmie argument :a, który określi odległości pomiędzy dwoma sąsiednimi równoległymi liniami. (3. - 8.) Narysowanie zewnątrznych lini. Zauważenie prawidłowości w dalszej części i (9. - 15.) użycie pętli do narysowania reszty elementu. Na koniec (16. - 20.) Powrót do miejsca gdzie żółw był w momencie rozpoczęcia procedury.

Alfa

Procedura Alfa ma za zadanie ustalić wielkość obrazka i odpowiednio ustawić i obrócić, aby funkcja ALFA_pom wszystko narysowała.

  1. oto ALFA
  2.   niech "h 480
  3.   niech "a :h / 40
  4.   niech "w :a * 53
  5.   pod
  6.   ws :h / 2
  7.   pw 90
  8.   ws :w / 2
  9.   lw 90
  10.   opu
  11.   powtórz 2 [
  12.     np :h
  13.     pw 90
  14.     np :w
  15.     pw 90
  16.   ]
  17.   pod
  18.   np :a * 7
  19.   pw 90
  20.   np :a * 7
  21.   lw 90
  22.   opu

(2.) Ustalenie maksymalnej wysokości rysunku. (3.) Ustalenie odległości :a dla funkcji ALFA_pom. (3.) Wyliczenie szerokości rysunku. (4. - 9.) Przejście do rysowania obramowania i (10. - 15.) jego narysowanie. Następnym etapem będzie (16. - 21.) Przesunięcie do środka lewego dolnego elementu.

  1.   powtórz 3 [
  2.     powtórz 4 [
  3.       powtórz 4 [
  4.         ALFA_pom :a
  5.         pw 90
  6.       ]
  7.       pod
  8.       pw 90
  9.       np :a * 13
  10.       lw 90
  11.       opu
  12.     ]
  13.     pod
  14.     np :a * 13
  15.     pw 90
  16.     ws :a * 13 * 4
  17.     lw 90
  18.     opu
  19.   ]
  20. już

(23.) Następnie należy narysować 3 wiersze po (24.) 4 elementy i (25.) każdy element ma się składać z 4 części (26.) ALFA_pom z czego (27.) każda kolejna ma być obrócona w prawo względem poprzedniej. (29. - 34.) Po narysowaniu elementu przejdź w prawo do następnego. (36. - 41.) Po narysowaniu całego wiersza przejdź do pierwszego elementu od lewej wiersz wyżej.

Zadanie 4

Poniższy rysunek przedstawia motyw linearny zainspirowany przez rysunek otrzymany w zadaniu trzecim. Napisz procedurę bez parametrów BETA, która rysuje na ekranie taki wzór.

Idea zadania bardzo podobna do poprzedniego. To zadanie ma prostszy kod ze względu na fakt, że nie obramowania. Ponadto w tym przypadki nie zostanie utworzona procedura pomocnicza podobna do ALFA_pom, ponieważ rysowany element nie jest skomplikowany. Jednak stworzenie podobnej procedury z pewnością pozwoli na zwiększenie przejrzystości kodu.

  1. oto BETA
  2.   niech "h 480
  3.   niech "a :h/38
  4.   pod
  5.   ws :a * 13
  6.   pw 90
  7.   ws :a * 19.5
  8.   lw 90
  9.   opu
  10.   powtórz 3 [
  11.     powtórz 4 [
  12.       powtórz 4 [

(2.) Ustal wysokość rysunku o (3.) oblicz długość najmniejszego odcinka. Następnie (4. - 9.) przejdź do rysowania lewego dolnego elementu. (10.) Narysuj trzy wiersze (11.) po 4 elementy złożone z (12.) 4 identycznych części.

  1.         np :a * 6
  2.         pw 90
  3.         powtórz 5 [
  4.           np :a
  5.           pw 90
  6.           np :a
  7.           lw 90
  8.         ]
  9.         np :a
  10.         lw 90
  11.         np :a * 5
  12.         pod
  13.         pw 90
  14.         ws :a * 6
  15.         lw 90
  16.         ws :a * 6
  17.         pw 90
  18.         opu

Element jest rysowany następująco: (13.) narysuj linię ze środka, a następnie (15. - 20.) narysuj pięć schodków i (21. - 23.) zakończ równoległym odcinkiem do początkowego, a potem (24. - 30.) wróć tam skąd rysowanie elementu się zaczęło. Bardzo ważne, aby (29.) obrócić żółwi o 90 stopni co pozwoli na pełne narysowanie elementu w czterech pętlach.

  1.       ]
  2.       pod
  3.       pw 90
  4.       np :a * 13
  5.       lw 90
  6.       opu
  7.     ]
  8.     pod
  9.     pw 90
  10.     ws :a * 13 * 4
  11.     lw 90
  12.     np :a * 13
  13.     opu
  14.   ]
  15. już

(32. - 36.) Po narysowaniu elementu przejdź do rysowania następnego. Z kolei (38. - 43) po narysowaniu całego wiersza rozpocznij rysowanie kolejnego od pierwszego elementu od lewej wiersz wyżej.