Strona o programowaniu w języku LOGO

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.

Krzyż

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ż

Szlaczek

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ż


ZADANIA do samodzielnego wykonamia

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ę :-)


więcej motywów

Ź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.

Wielokąt (wielobok) foremny

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

Pliki projektów do zobaczenia (i przeanalizowania)


Zadania do samodzielnego wykonania

Zadanie 1 

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.

Kwadrat od środka

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ż

Kostka Rubika


Jeśli powyżej nie jest widoczna zawartość projektu, to należy zainstalować wtyczkę. Niestety nie działa ona prawidłowo z wersjami 64-bitowymi przeglądarek internetowych. Jednak możesz zainstalować na swoim komputerze 32-bitową wersję przeglądarki Opera i za jej pomocą oglądać udostępniane projekty.

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ż
Valid XHTML 1.0 StrictPoprawny CSS!
Copyright (c) 2009-2017. Szkoła Podstawowa nr 3 im. Mikołaja Kopernika. All rights reserved.