Strona o programowaniu w języku LOGO

Sterowanie żółwiem

Polecenia pierwotne

Programowanie polega na opisywaniu w postaci procedur (czyli poleceń zrozumiałych dla tego języka) prostych czynności, które ma wykonać żółw.
Najprostsze procedury rozwiązywane są przez polecenia pierwotne (procedury), które żółw zna niejako „od urodzenia”, dzięki czemu możesz ich używać bez konieczności definiowania.

W programie Logomocja istnieje kilkaset procedur pierwotnych, które możemy podzielić na dwie grupy:

  • Polecenia pierwotne – instrukcje opisujące czynności, których wykonanie powoduje określony skutek (zadanie) np. wydrukowanie tekstu na ekranie, przemieszczenie żółwia, zmiana ustawień, zakończenie pracy w Logo itd.. Dlatego w opisie polecenia trzeba określić jego skutek.
  • Funkcje pierwotne – instrukcje, których wykonanie wyznacza wartość funkcji (nazywanej też wynikiem funkcji); przykładem jest funkcja PWK obliczająca pierwiastek kwadratowy z liczby. Wywołując funkcję musimy napisać, co interpreter ma zrobić z wynikiem zwracanym przez nią. Najczęściej funkcję umieszcza się w wyrażeniach lub wypisuje na ekranie. Wynik funkcji może być daną innych procedur.

Większość procedur i funkcji wymaga podania określonych danych – parametrów.

Tryb pracy żółwia

To, jaką czynność właśnie wykonuje żółw, zależy od trybu jego pracy; może rysować, ścierać lub po prostu się przemieszczać po ekranie. Aby żółw przeszedł do odpowiedniego trybu, korzystamy z następujących komend:

polecenie skrót wyjaśnienie typ
podnieś pod podnieś pisak żółwia – żółw przesuwa się po ekranie nie zostawiając za sobą śladu p
opuść opu opuść pisak żółwia – żółw przesuwa się po ekranie zostawiając za sobą linię p
ścieraj ścier ścieraj – żółw przesuwa się po ekranie ścierając istniejące elementy p

∗ typ    p – polecenie pierwotne    f – funkcja pierwotna

Najczęściej używane polecenia pierwotne w trybie dialogu

Spróbuj posłużyć się najbardziej elementarnymi procedurami:

polecenie skrót wyjaśnienie typ
  pokaż wszystkie aktywne żółwie na ekranie p
  schowaj wszystkie żółwie p
naprzód x np x porusza żółwiem o x kroków (pikseli) do przodu p
wstecz x ws x porusza żółwiem o x kroków (pikseli) do tyłu p
prawo x pw x obraca żółwia o x° w prawo p
lewo x lw x obraca żółwia o x° w lewo p
ustalKierunek
 kąt
skieruj
 kąt
skier
 kąt
żółw wykonuje obrót przyjmując kierunek wyznaczony przez dany kąt
Kierunek jest wyrażany w stopniach, narasta zgodnie z ruchem wskazówek zegara zaczynając od północy.
Na przykład, ustalKierunek 0 ustawia aktywne żółwie w kierunku na północ, a ustalKierunek 90 ustawia je w kierunku na wschód.
p
czyść cs czyści ekran i ustawia żółwia na pozycji wyjściowej – zwykle (0,0)
w kartezjańskim układzie współrzędnych
p
zmaż   Strona lub plansza jest czyszczona, tj. jest wypełniana kolorem tła.
Zmaż nie zmienia kierunku ani pozycji ani stanu pisaka żadnego z żółwi.
p
wróć   Przesuwa każdego aktywnego żółwia do jego wyjściowej pozycji – zwykle (0,0) i wyjściowego kierunku.
Aktualny stan, kolor, grubość i wzór pisaka nie zmieniają się. Żółw wracając do pozycji wyjściowej nie rysuje linii. Żółw pozostaje widoczny, jeśli wcześniej był widoczny. Ekan nie jest czyszczony.
p
powtórz
liczba lista-P
  Powtarza daną listę poleceń daną liczbę razy. p
okrąg d   Żółw rysuje okrąg o podanej średnicy. Środek okręgu jest w miejscu, w którym stoi żółw. p
koło d   Żółw rysuje koło o średnicy liczba i środku w aktualnej swojej pozycji.
Żółw używa swojego aktualnego koloru, grubości i wzoru pisaka oraz koloru malowania.
p
wielokąt
kod rysunku
  żółw rysuje wypełniony wielokąt na podstawie kodu rysunku. p
ustalPoz [x,y] napoz
[x,y]
Przemieszcza żółwia na określoną pozycję bezwzględną na ekranie
Argumentem jest lista dwóch liczb, współrzędne X i Y np. napoz [0 0]
p
czekaj n   Powoduje zatrzymanie żółwia na daną liczbę milisekund.
czekaj 1000 zatrzymuje żółwia na 1 sekundę.
p
pwk liczba   Wynikiem jest pierwiastek kwadratowy danej liczby.
Dana liczba musi być nieujemna.
F
jld   Nazwa funkcji powstała od „jak los da”.
Wynikiem jest słowo jld, które może być daną wielu poleceń (na przykład naPoz, ustalKolPis itd.) jako zamiennik losowej wartości. Na przykład, ustalGrubość jld jest równoważne z ustalGrubość 1 + losowa 20; prawo jld jest równoważne z prawo1 + losowa 90 itd.
F

∗ typ    p – polecenie pierwotne    f – funkcja pierwotna

Nic trudnego, prawda?

Zadania na rozgrzewkę…

Domek

Jak zatem narysować poniższy rysunek?

Nic prostszego! Należy pokazać żółwia, następnie przejść żółwiem o 100 pikseli do przodu, obrócić go o 45° w prawo i przejść nim o 100 pikseli do przodu. Teraz obrót w prawo 90° i znowu 100 pikseli do przodu.Na koniec ostatnie 45° w prawo i 100 pikseli. do przodu. Już.
Zatem Twój „program” będzie wyglądał następująco:

np 100 pw 45 np 100 pw 90 np 100 pw 45 np 100

Kwadrat

Narysowanie kwadratu o określonym przez Ciebie boku jest stosunkowo łatwe. Musisz postawić cztery kreski obrócone względem siebie o 90°.

np 100 pw 90
np 100 pw 90
np 100 pw 90
np 100 pw 90

Zauważ, że w powyższym zadaniu czterokrotnie wykonałeś tą samą czynność: poruszałeś się naprzód, a następnie obracałeś żółwia o 90° w prawo. Program znacznie by się uprościł, gdyby można było nakazać żółwiowi pewne czynności wykonać kilkakrotnie. Spróbuj:

powtórz 4 [ np 100 pw 90 ]

Trójkąt równoboczny

Zastanów się i pomyśl o jakie skręca żółw? Z matematyki powinieneś wiedzieć ile wynosi kąt wewnętrzny w takim trójkącie. Nieobce ci powinny być też takie pojęcia, jak: kąt pełny, półpełny, kąty dopełniające, przyległe oraz kąty wewnętrzne i zewnętrzne.

Zwróć uwagę, że ponieważ przyjęliśmy założenie, że żółw podczas rysowania figur foremnych obraca się zawsze w prawo to, aby jego podstawa była pozioma – należało przed wydaniem polecenia rysowania trójkąta skierować żółwia na zachód.

skieruj 270
powtórz 3 [ np 100 pw 120 ]

Program pamięta polecenia wydawane żółwiowi w trakcie danej sesji (od otwarcia do zamknięcia programu), ale tworzenie bardziej złożonych projektów byłoby praktycznie niemożliwe, gdybyśmy nie mogli zapisać poleceń dla żółwia. W przypadku niedokończenia projektu musielibyśmy wszystko zaczynać od nowa. Dlatego też polecenia dla żółwia łączymy w procedury.

Żółwie: kolor, grubość i wzór pisaka

Aktualny kolor, grubość i wzór pisaka żółwia są pamiętane w jego ustawieniach kolpis, grubość i wzórpis. Te ustawienia można odczytać lub modyfikować następującymi procedurami:

polecenie skrót wyjaśnienie typ
ustalGrubość
 grubość_pisaka
ugp Ustala grubość pisaka dla wszystkich aktywnych żółwi – żółw rysuje linie (aktualnym kolorem, grubością i wzorem) tylko wtedy, kiedy pisak jest opuszczony
Grubość może wynosić od 1 do 15 pikseli.
p
ustalKolPis
 kolor
ukp Ustala kolor pisaka dla wszystkich aktywnych żółwi – kolor może być:
liczbą całkowitą od 0 do 15 włącznie, oznaczającą jeden z 16 kolorów podstawowej palety barw
nazwą koloru, na przykład czerwony, czerwony11, ciemnoniebieski2 itd.
kodem RGB, na przykład [128 128 0]
słowem jld oznaczającym losowy kolor
p
ustalWzórPis
 wzór_nr
uwp
 uwz
Ustala wzór pisaka dla wszystkich aktywnych żółwi – używany przy opuszczonym pisaku. Domyślną wartością wzoru pisaka dla nowotworzonych żółwi jest linia ciągła.
Jest 7 dostępnych wzorów pisaka i linii tła, ponumerowanych od 0 do 6. Domyślnym wzorem jest 0.
p

Żółwie: malowanie

Wszystkie zamalowania dotyczą aktualnego zakresu żółwia.

polecenie skrót wyjaśnienie typ
ustalKolMal
 kolor
ukm Ustala kolor malowania wszystkich aktywnych żółwi – ten kolor jest używany przez polecenia zamaluj i wielokąt. p
ustalWzórMal
 wzór
uwm Ustala wzór malowania wszystkich aktywnych żółwi – ten wzór jest używany przez polecenia zamaluj i wielokąt.
Domyślnym wzorem malowania jest wzór 0.
p
zamaluj zam żółw zamalowuje otaczający go obszar ograniczony najbliższymi liniami, używając koloru malowania. p

Na rozgrzewkę… Zadania do samodzielnego wykonania.

Zadanie 1 – kwadrat z przekątnymi 

Wskazówka: Do narysowania przekatnych kwadratu możesz użyć poleceń: napoz lub np pwk wielkość_boku

Zadanie 2 – pies i kot  

Zadanie 3 – żaglówka  

Wskazówka: Rysunek proponuję zacząć od narysowania zielonego kadłuba żaglówki, wykorzystując polecenie wielokąt. Wcześniej ustal kolor malowania.
Podczas rysowania żagla zmień wzór malowania z domyślnego 0 (pełny) na 4.

Zadanie 4 – Kontury  

Przeczytasj opis działania procedury pierwotnej napoz. Przeanalizuj algorytm działania procedury kontury przedstawionej poniżej i wykonaj ją, podając jako argument listę dwuelementowych list liczbowych. Zdefiniuj nowe procedury, z których każda, w wyniku wywołania procedury kontury z odpowiednimi parametrami, będzie rysowała różne kształty (np. figury geometryczne, rysunek żyrafy itp.).

oto kontury :dane
 jeśli puste? :dane [stop]
 napoz pierw :dane
 kontury bp :dane
już

Np. sprawdź co się stanie, jak wpiszesz w wierszu poleceń:

? kontury [[100 100][0 200]]

Przykład jednej z takich figur (rysunek obok) możesz zobaczyć wykonując procedurę klepsydra

oto klepsydra
 cs
 ugp 2 ukp 12
 kontury [[100 100][0 200][100 200][0 100]
   [100 0][0 0]]
 ugp 1 ukp 0
już
Valid XHTML 1.0 StrictPoprawny CSS!
Copyright (c) 2009-2017. Szkoła Podstawowa nr 3 im. Mikołaja Kopernika. All rights reserved.