Procedury bez parametrów
Najprostsze czynności zostały zdefiniowane przez twórców języka Logo. Nazywamy je, jak już wiesz procedurami pierwotnymi. Wykorzystując istniejące procedury możesz budować własne.
Definicję procedury rozpoczynasz od słowa oto. Następnie podaj nazwę procedury (nie może ona zawierać spacji), potem dodaj treść procedury. Koniec sygnalizujesz słowem już.
Aby zdefiniować procedurę wywołujesz edytor procedur poleceniem red (redaguj ). Możesz po słowie red wpisać nazwę procedury (np. red "kwadrat), albo możesz to zrobić później.
oto krzyż
lw 90
powtórz 4 [
np 20 lw 90 np 20 pw 90 np 20 pw 90]
już
W poniższych ćwiczeniach przekonasz się, że programowanie w Logo nie jest trudne. Warunkiem powodzenia tej operacji jest jednak przeanalizowanie problemu i jasne sformułowanie sposobu jego rozwiązania. Czasami pomaga podział zadania na mniejsze części.
Przed stworzeniem procedury Krzyż można by było np. stworzyć procedurę C i dopiero po udanym jej przetestowaniu stworzyć właściwą. Jest to tak zwane rozwiązywanie problemu metodą wstępującą od szczegółu do ogółu. Inny sposób rozwiązywania zadania to metoda zstępująca (od ogółu do szczegółu) - przeciwnie, wymaga najpierw zdefiniowania ogólnego rozwiązywania problemu, a następnie zdefiniowania zadań szczegółowych.
oto C
np 20 pw 90 np 20 pw 90 np 20
już
oto krzyż
powtórz 4 [C lw 90]
już
oto ZĄBEK
ukp jld
pw 90
np 20 lw 90 np 40 pw 90 np 40 pw 90
np 20 pw 90 np 20 lw 90 np 20 lw 90 np 20
lw 90
już
oto SZLACZEK
ugp 5
powtórz 5 [ZĄBEK]
już
Spróbuj napisać procedurę skłądającą sie z prostych powtarzalnych elementów, jak np. na rysunku poniżej.
Za stworzenie ciekawych szlaczków, takich jak na rysunku poniżej można uzyskać ocenę :-)
Źródło:
http://www.rost.com.pl/Papier/DziurkaczeOzdobne.htm
Procedury z parametrami
Procedury bez parametru nie są zbyt wygodne. Jeśli chcielibyśmy np. narysować ten sam element kilka razy, ale różnej wielkości, to za każdym razem trzeba by było tworzyć nową procedurę!
Lepiej jest skonstruować uniwersalna procedurę, która sprawdza się w różnych sytuacjach.
Weźmy np. taki KWADRAT. Przecież można napisać uniwersalną procedurę, w której długość boku będzie podawana razem z nazwą procedury. Mało tego, możemy stworzyć procedurę jeszcze bardzie uniwersalną, która będzie rysować dowolny wielobok foremny – jako atrybut procedury będziemy podawać ilość boków.
oto wielobok.Foremny :ile :bok
opuść
powtórz :ile [np :bok pw 360 / :ile]
już
O jaki kąt obraca się za każdym razem żółw, rysując wielokąt foremny?
To proste – musi wykonać pełny obrót dookoła swojej osi (czyli o 3600) - zatem kreśląc wielobok foremny o n-bokach za każdym razem obraca się o kąt 3600/n, co w przypadku pięciokąta foremnego wynosi 720. Zauważ jednak, że wcale nie musimy obliczać tego kąta. Żółw sobie sam z tym poradzi. Musimy wpisać tylko odpowiednie działanie matematyczne.
Przy okazji przypomnij sobie (lub zapamiętaj) wzór na miarę kąta wewnętrznego (pomiędzy sąsiednimi bokami) wielokąta foremnego:
γ = 1800 - 3600 / n
Narysowanie tego pięcioboku foremnego uzyskano poleceniem:
wielobok.Foremny 5 100
Zwróć uwagę, że parametrami procedury są: ilość boków wielokąta i długość jego boku – odpowiednio :ile :bok. W definicji procedury nazywamy je parametrami formalnymi. Nazwa parametru poprzedzona jest znakiem : (dwukropkiem bez spacji po tym znaku), tzw. operatorem wartościowania, co odróżnia go od nazwy procedury. Po zakończeniu pracy w edytorze i zamknięciu okna pamięci możesz wywołać procedurę dla różnych wartości parametrów, nazywanych tu parametrami aktualnymi.
Sprawdź, co żółw zrobi jeśli w wierszu poleceń napiszesz
wielobok.Foremny 36 10
Wskazówka:
Przykłady d e f łatwiej będzie ci rozwiązać, jeżeli zamiast procedury rysowania kwadratu od lewego dolnego rogu wykorzystasz procedurę, gdzie żółw na starcie jest umieszczony w środku kwadratu.
oto kwadratS :bok
opuść
hop -0.5 * :bok -0.5 * :bok
powtórz 4 [np :bok pw 90]
hop 0.5 * :bok 0.5 * :bok
już
W procedurze kwadratS Wykorzystano procedurę hop przemieszczającą żółwia (przy podniesionym pisaku) w górę i w prawo odpowiednio o wielkość a i b.
oto hop :a :b
podnieś
np :a pw 90 np :b lw 90
opuść
już
Przeanalizuj procedurę Starter użytą do tworzenia „Kostki Rubika”. To zadanie podobne do przykładu c tylko trochę trudniejsze, no i oczywiście bardziej kolorowe.
Zamiast procedury KOSTKA mozna wstawić procedurę rysującą kwadrat.
Kwadratów jest 9 zamiast 27, więc jedne powtórz
odpada.
oto Starter
przypisz "bok 70
sż
powtórz 3 [
powtórz 3 [
powtórz 3 [KOSTKA :bok]
hop :bok :bok*(-3)]
hop :bok*(-3) 0
pod pw 45 ws (:bok / pwk 2) lw 45
]
czekaj 1000
cs
Starter
Już
oto KOSTKA :bok
; podczas rysowania przyjmij parametr :bok nie większy niz 80
opu
ugp 1 ukp 0
ukm jld uwm 0
wielokąt [4 [:bok 90]]
czekaj 100 np :bok pw 45
wielokąt [2 [(:bok / pwk 2) 45 :bok 135]]
czekaj 100 pw 45 np :bok lw 45
wielokąt [2 [(:bok / pwk 2) 135 :bok 45]]
lw 45 ws :bok
już