Animacja – światła drogowe - Home Page of Bożena Woźna

Transkrypt

Animacja – światła drogowe - Home Page of Bożena Woźna
Jezyki i metody programowania
WYKŁAD 5 i 6
Logo. Animacje.
Dr Bożena Woźna-Szcześniak
[email protected]
Instytut Matematyki i Informatyki
Akademia im. Jana Długosza
Szachownica
oto kw
pż opu
repeat 4 [ np 40 pw 90 ]
pod pw 45
np 5
ukm [ 95 173 84 ]
zamaluj
ws 5
pw 45
np 40
lw 90
już
2010-03-19
oto kw1
pż opu
repeat 4 [ np 40 pw 90 ]
pod pw 45
np 5
ukm [ 173 95 55 ]
fill
ws 5
pw 45
np 40
lw 90
już
dr B. Woźna-Szcześniak
2
Szachownica
oto szachownica
repeat 4 [
repeat 4 [ kw kw1 ] lw 90
np 320 pw 90 np 40
repeat 4 [kw1 kw] lw 90
np 320 pw 90 np 40]
już
2010-03-19
dr B. Woźna-Szcześniak
3
Losowe gwiazdki
Rysuje pojedynczą gwiazdkę:
oto gwiazda
powtórz 6 [powtórz 2 [ np 70 pw 60 np 70 pw 120] pw 60]
już
------------------------------------------------------------------------------------:rozrzut - zasięg rozrzutu gwiazdek, :ile - ilość gwiazd.
oto gwiazdki :ile :rozrzut
przyp "x losowa :rozrzut
pw losowa 360
jeśli :ile = 0 [stop]
pod np :x opu
gwiazda
czekaj 100
;Liczba dodatnie <=65535
gwiazdki :ile - 1 :rozrzut
już
2010-03-19
dr B. Woźna-Szcześniak
4
Losowe gwiazdki
ukp 9
zamaluj
ukp 14
ugp 7
gwiazdki 30 1500
2010-03-19
dr B. Woźna-Szcześniak
5
Losowe gwiazdki inaczej
Rysuje pojedynczą gwiazdkę:
oto romb
powtórz 2 [ np 70 pw 60 np 70 pw 120]
już
oto gwiazda
powtórz 6 [romb pw 60]
już
------------------------------------------------------------------------------------:rozrzut - zasięg rozrzutu gwiazdek, :ile - ilość gwiazd.
oto gwiazdki :ile :rozrzut
przyp "x losowa :rozrzut pw losowa 360
jeśli :ile = 0 [stop]
pod np :x opu gwiazda czekaj 100
gwiazdki :ile - 1 :rozrzut
już
2010-03-19
dr B. Woźna-Szcześniak
6
Animacja
Czym jest animacja?
Animacja to stworzenie iluzji ruchu poprzez utworzenie serii
obrazów, na których położenie przedmiotów minimalnie się
różni, a następnie odtworzenie ich z taką szybkością, aby oko
miało złudzenie płynnego ruchu.
Iluzja jest przekonująca tylko wtedy, gdy częstotliwość
wyświetlania klatek (liczba klatek na sekundę) jest
wystarczająco duża, aby oszukać oko.
W przypadku człowieka to ok. 60 klatek na sekundę, aby
zapewnić płynność ruchu obiektu.
2010-03-19
dr B. Woźna-Szcześniak
7
Animowane serduszko
oto serce
opu
lw 45 np 129
powtórz 200 [np 1 pw 1]
lw 130
powtórz 200 [np 1 pw 1]
np 131 pw 120
pod np 10 zamaluj
już
2010-03-19
oto animowaneserce
powtórz 20 [
niech "x losowa 14
ukp :x
cs
serce
czekaj 400]
już
dr B. Woźna-Szcześniak
8
Animacja – światła drogowe
oto skok :x :y
opu
rt 90
fd :x
lt 90
fd :y
pod
już
2010-03-19
dr B. Woźna-Szcześniak
9
Animacja – światła drogowe
Procedura rysująca okrąg o danym promieniu.
oto okrąg :r
skok -1 * :r 0
repeat 360 [fd 0,0175 * :r rt 1]
skok :r 0
już
2010-03-19
dr B. Woźna-Szcześniak
10
Animacja – światła drogowe
oto prostokąt :a :b
skok -0,5 * :a 0
fd 0,5 * :b rt 90
fd :a rt 90
fd :b rt 90
fd :a rt 90
fd 0,5 * :b
skok 0,5 * :a 0
już
2010-03-19
dr B. Woźna-Szcześniak
11
Animacja – światła drogowe
oto zmiany :a
ukp 12 zamaluj wait 3000
skok 0 -1 * :a ukp 14 zamaluj wait 3000
skok 0 :a ukp 0 zamaluj
skok 0 -1 * :a ukp 0 zamaluj
skok 0 -1 * :a ukp 10 zamaluj wait 3000 ukp 0 zamaluj
skok 0 :a ukp 14 zamaluj wait 3000 ukp 0 zamaluj
skok 0 :a
zmiany :a
już
2010-03-19
dr B. Woźna-Szcześniak
12
Animacja – światła drogowe
oto sygnalizacja :a
cs ukp 0
skok 0 0,5 * :a
sż ukp 8
prostokąt :a 3 * :a
zamaluj
skok 0 :a
repeat 3 [ukp 0 okrąg 0,4 * :a zamaluj skok 0 -1 * :a]
skok 0 3 * :a
zmiany :a
już
2010-03-19
dr B. Woźna-Szcześniak
13
Animacja – światła drogowe
oto starter
sygnalizacja 100
już
2010-03-19
dr B. Woźna-Szcześniak
14
Wędrujący ludek – pierwsza faza
oto r1
pod napoz [-300 100] opu
powtórz 4 [np 30 pw 90]
lw 90 ws 15 pw 90 ws 100
pw 15 ws 50 pw 15 ws 50 pw 90 np 10 ws 10
lw 90 np 50 lw 15 np 50
lw 15
lw 30 ws 50 pw 90 ws 50 pw 90 np 10 ws 10 lw 90
np 50 lw 90 np 50 pw 30 np 80
pw 45 ws 40 lw 90 ws 40
np 40 pw 90 np 40 lw 45
lw 30 ws 40 pw 90 np 40
ws 40 lw 90 np 40 pw 30
już
2010-03-19
dr B. Woźna-Szcześniak
15
Wędrujący ludek – druga faza
oto r2
pod napoz [-200 100] opu powtórz 4 [np 30 pw 90]
lw 90 ws 15 pw 90 ws 100 pw 30 ws 50 pw 15
ws 50 pw 90 np 10 ws 10 lw 90 np 50 lw 15 np 50
lw 30 lw 15 ws 50 pw 30 ws 50 pw 90 np 10 ws 10 lw 90
np 50 lw 30 np 50 pw 15 np 80 pw 30 ws 40 lw 90 ws 40
np 40 pw 90 np 40 lw 45 lw 30 ws 40
pw 150 np 40 ws 40 lw 150 np 40 pw 45
już
2010-03-19
dr B. Woźna-Szcześniak
16
Wędrujący ludek – faza trzecia
oto r3
pod napoz [-100 100] opu
powtórz 4 [np 30 pw 90] lw 90 ws 15 pw 90 ws 100
pw 15 ws 50 pw 30 ws 50 pw 90 np 10 ws 10
lw 90 np 50 lw 30 np 50 lw 15 lw 15 ws 50
pw 30 ws 50 pw 90 np 10 ws 10 lw 90
np 50 lw 30 np 50 pw 15 np 80
pw 15 ws 40 lw 90 ws 40 np 40 pw 90 np 40
lw 15 lw 30 ws 40 pw 120 np 40
ws 40 lw 120 np 40 pw 30
już
2010-03-19
dr B. Woźna-Szcześniak
17
Wędrujący ludek – faza czwarta
oto r4
pod napoz [0 100] opu powtórz 4 [np 30 pw 90] lw 90
ws 15 pw 90 ws 100 pw 5 ws 50 pw 15 ws 50 pw 90
np 10 ws 10 lw 90 np 50 lw 15 np 50
lw 5 lw 15 ws 50 pw 90 ws 50 pw 90 np 10 ws 10 lw 90
np 50 lw 90 np 50 pw 15 np 80 pw 5 ws 40 lw 90 ws 40
np 40 pw 90 np 40 lw 5 lw 5 ws 40 pw 90 np 40
ws 40 lw 90 np 40 pw 5
już
2010-03-19
dr B. Woźna-Szcześniak
18
Wędrujący ludek – faza piąta
oto r5
pod napoz [100 100] opu powtórz 4 [np 30 pw 90]
lw 90 ws 15 pw 90 ws 100 pw 5 ws 50 pw 15 ws 50
pw 90 np 10 ws 10 lw 90 np 50 lw 15 np 50 lw 5
lw 45 ws 50 pw 15 ws 50 pw 90 np 10 ws 10 lw 90
np 50 lw 15 np 50 pw 45 np 80 pw 45 ws 40 lw 90
ws 40 np 40 pw 90 np 40 lw 45 lw 30
ws 40 pw 150 np 40 ws 40 lw 150 np 40 pw 30
już
2010-03-19
dr B. Woźna-Szcześniak
19
Wędrujący ludek – faza szósta
oto r6
pod napoz [200 100] opu powtórz 4 [np 30 pw 90]
lw 90 ws 15 pw 90 ws 100 pw 15 ws 50 pw 15 ws 50
pw 90 np 10 ws 10 lw 90 np 50 lw 15 np 50 lw 15 lw 30
ws 50 pw 90 ws 50 pw 90 np 10 ws 10 lw 90 np 50
lw 90 np 50 pw 30 np 80 pw 45 ws 40 lw 90 ws 40
np 40 pw 90 np 40 lw 45 lw 30 ws 40 pw 90 np 40
ws 40 lw 90 np 40 pw 30
już
2010-03-19
dr B. Woźna-Szcześniak
20
Wędrujący ludek – faza siódma
oto r7
pod napoz [300 100] opu powtórz 4 [np 30 pw 90]
lw 90 ws 15 pw 90 ws 100 pw 30 ws 50 pw 15
ws 50 pw 90 np 10 ws 10 lw 90 np 50 lw 15 np 50
lw 30 lw 15 ws 50 pw 30 ws 50 pw 90
np 10 ws 10 lw 90 np 50 lw 30 np 50 pw 15 np 80
pw 30 ws 40 lw 90 ws 40 np 40 pw 90 np 40
lw 45 lw 30 ws 40 pw 150 np 40 ws 40 lw 150
np 40 pw 45
już
2010-03-19
dr B. Woźna-Szcześniak
21
Wędrujący ludek - wszystkie fazy
2010-03-19
dr B. Woźna-Szcześniak
22
Wędrujący ludek
oto ludek
powtórz 50 [r1 czekaj 300
zmaż r2 czekaj 300
zmaż r3 czekaj 300
zmaż r4 czekaj 300
zmaż r5 czekaj 300
zmaż r6 czekaj 300
zmaż r7 czekaj 300 zmaż]
już
2010-03-19
dr B. Woźna-Szcześniak
23
Projekt prostej animacji
Tworzenie projektu animacji, podobnie jak kręcenie filmu, składa
się z kilku etapów:

tworzenia ekranu, czyli scenerii w której rozgrywa się akcja,

tworzenia żółwi, czyli bohaterów akcji,

napisania procedur do wykonywania zadań, w szczególności
działań żółwi, czyli stworzenia scenariusza.
2010-03-19
dr B. Woźna-Szcześniak
24
Tworzenie ekranu
Realizację projektu rozpoczynamy od zaprojektowania scenerii pejzażu z drogą biegnącą poziomo od lewego do prawego
brzegu. Krajobraz taki można narysować używając np.
Painta.
Malując scenerię projektu należy ustalić odpowiednio duży
rozmiar obszaru rysowania, aby wypełnić cały ekran graficzny
Logo. Jak duży, można sprawdzić w Logo:
Opcje - Wygląd ekranu.
Ustalamy właściwy rozmiar w programie Paint: Obraz - Atrybuty.
Malujemy krajobraz i zapisujemy go (np.
C:/Logokom/ekrany/pejzaż.bmp )
Aby krajobraz stał się scenerią animacji należy go w Logo
załadować: Plik- Ładuj ekran, wskazujemy odpowiedni katalog
i plik, klikamy Ok.
2010-03-19
dr B. Woźna-Szcześniak
25
Tworzenie ekranu
2010-03-19
dr B. Woźna-Szcześniak
26
Żółwie animacyjne, tworzenie i usuwanie nowego żółwia
Po uruchomieniu Logo Komeniusza jest tylko jeden podstawowy
żółw, mający postać małego trójkącika.
Atrybuty żółwia można sprawdzić klikając na niego prawym
klawiszem i wybierając opcję Żółw: Zmień mnie.
2010-03-19
dr B. Woźna-Szcześniak
27
Żółwie animacyjne, tworzenie i usuwanie nowego żółwia
Żółw „trójkącik” nie jest żółwiem
animacyjnym. Jest to żółw zwykły.
Standardowa postać żółwia nie jest
pojedynczym trójkątem, lecz sekwencją
24 trójkątów, różniących się orientacją,
czyli 24 faz.
Postać żółwia w sensie Logo jest obrazem,
czyli sekwencją faz.
W przypadku zwykłych żółwi fazy postaci
służą do pokazywania kierunku żółwia.
Gdy żółw zmieni kierunek (polecenie pw
lub lw) automatycznie odpowiednio
zmienia się faza pokazywana na ekranie.
2010-03-19
dr B. Woźna-Szcześniak
28
Żółwie animacyjne, tworzenie i usuwanie nowego żółwia
Żółwie animacyjnymi to takie, w
których zmiany faz będą
służyły do symulowania ruchu.
Na ekranie graficznym może żyć,
poruszać się i kreślić rysunki
do 4000 żółwi jednocześnie.
Możemy więc tworzyć nowe
żółwie, a niepotrzebne
usuwać.
2010-03-19
dr B. Woźna-Szcześniak
29
Żółwie animacyjne, usuwanie i tworzenie nowego żółwia




Aby usunąć żółwia należy wydać polecenie:
 usż żółw;
 usż lista żółwi;
Wszystkie wskazane żółwie muszą istnieć.
Jeżeli jest tylko jeden żółw, to standardowo nazywa się 0.
Jeżeli żółw 0 został skasowany, to można go przywrócić wydając
polecenie:
 usw – usuń wszystko. Usuwa wszystkie obiekty i żółwie z
pamięci i przywraca domyślne ustawienia Logo.
 odnowa – przygotowuje ekran graficzny do rysowania od
nowa. W szczególności usuwa wszystkie żółwie i uaktywnia
żółwia 0.
2010-03-19
dr B. Woźna-Szcześniak
30
Żółwie animacyjne, tworzenie i usuwanie nowego żółwia

By utworzyć nowego żółwia o nazwie słowo wydajemy polecenie:
 Nowyżółw słowo []
 Nowyżółw słowo [liczba1 liczba2 liczba3]
 Nowyżółw słowo [liczba1 liczba2 liczba3… słowa postać]
Gdzie słowa to dowolne spośród: pod, opu, ścier, odwr, ścieranie,
odwracanie, pż, sż, słuchaj, animacja; a postać to obraz,
‘’plik_LGW, lub zmienna, której wartością jest obraz.
Jeśli drugi parametr jest listą pustą, to polecenie jest równoważne
poleceniu: Nowyżółw słowo [0 0 0].
W przeciwnym przypadku liczba1 liczba2 to współrzędne pozycji
żółwia, a liczba3 oznacza jego podstawowy kierunek.
Jeżeli nie ma innych parametrów na liście, to oznacza, że przyjęte
są wartości standardowe.
2010-03-19
dr B. Woźna-Szcześniak
31
Żółwie animacyjne, tworzenie i usuwanie nowego żółwia
Tworzenie nowego żółwia, który będzie się poruszał po drodze:
 Kliknij prawym klawiszem myszki na początku drogi, w lewej
części ekranu.
 Wydaj polecenie: utwórz żółwia.
 Ustal następujące parametry:






2010-03-19
nazwa: Tomek,
odhaczamy pole Opuść,
z galerii wybieramy postać o nazwie Tomek,
zaznaczamy Podgląd - żółw Tomek składa się z dwóch faz, które
niezbyt dobrze nadają się do pokazywania na ekranie zmian
kierunku ruchu, ale może być to dobra postać żółwia
animacyjnego,
ustalamy jego podstawowy kierunek na wschód (90 stopni),
zaznaczamy pole Animacja.
dr B. Woźna-Szcześniak
32
Poruszający się Tomek
Aby wprawić Tomka w ruch
wystarczy wykonać
następującą procedurę:
oto ruch
np 10
czekaj 100
ruch
już
2010-03-19
dr B. Woźna-Szcześniak
33
Poruszający się Tomek
Aby Tomek „lepiej” jeździł
należy wykorzystać fazy:
oto ruch
ufa faza + 1
np 10
czekaj 100
ruch
już
2010-03-19
Polecenie UFA (ustal fazę)
stosujemy tylko do żółwi
animacyjnych.
FAZA – to funkcja pierwotna,
której wynikiem jest numer
fazy przedstawiającej
żółwia na ekranie.
Wartością wyrażenia FAZA
+ 1 jest numer następnej
fazy.
Jeśli postać żółwia ma dwie
fazy, to następną po fazie 2
jest faza 1.
dr B. Woźna-Szcześniak
34
Nowy niestandardowy żółw
Można również samemu zaprojektować nową postać żółwia.
Utworzymy nowego żółwia - dziewczynka, która będzie stała na
drodze i machała do nas ręką.
Klikamy prawym przyciskiem myszy, gdzie ma stać nasz nowy
bohater akcji, wybieramy- Utwórz żółwia:
 nazwa: dziewczynka,
 odhaczamy pole opuść,
 zaznaczamy animację,
 klikamy dwa razy w okienko podglądu postaci żółwia otwiera się okno edytora obrazów, w którym możemy
projektować nowego żółwia.
2010-03-19
dr B. Woźna-Szcześniak
35
Nowy niestandardowy żółw
Aby stworzyć kolejne fazy żółwia
postępujemy następująco:

otwieramy okno Treść,

klikamy Kopiuj, następnie Wstaw
za. Teraz obraz składa się z
dwóch identycznych faz,

klikamy druga fazę i Ok,

zmieniamy dowolnie postać,

czynności powyższe powtarzamy
tworząc kolejne fazy ruchu żółwia.
Zapisujemy utworzony obraz: PlikZapisz jako- dziewczynka.
Klikamy przycisk Zakończ i Zamknij.
2010-03-19
dr B. Woźna-Szcześniak
36
Tomek i dziewczynka – eksperymenty z wieloma żółwiami
Uzupełniamy scenariusz naszej animacji, czyli procedurę Ruch. Żółw
Tomek ma się poruszać, natomiast żółw Dziewczynka ma stać i
machać do nas ręką, więc należy nasz scenariusz rozdzielić na
role dla każdego z nich. Użyjemy do tego polecenia Słuchaj.
oto ruch
słuchaj [Tomek]
Po poleceniu Słuchaj tylko
ufa faza + 1
wymienione w nim żółwie są
np 10 czekaj 100
aktywne i będą słuchały poleceń.
słuchaj [dziewczynka]
Wszystkie inne są pasywne, tzn.
ufa faza + 1
nadal istnieją, ale śpią aż do chwili,
czekaj 100
gdy je zbudzimy (np. poleceniem
ruch
Słuchaj).
już
2010-03-19
dr B. Woźna-Szcześniak
37
Nowy niestandardowy żółw
W Logo oprócz tego, że
możemy animować żółwie,
możemy również napisać
procedurę dla żółwia, która
wywołana będzie stanowiła
animację.
Przykładowo: na ekranie, w
miejscu gdzie mamy słonko
utwórzmy żółwia, który
będzie rysował migające
promienie słońca.
2010-03-19
oto promienie
ugp 3
powtórz 36 [ukp 14 pod np 30
opu np 30 pod ws 60 pw 10]
pw 5
powtórz 36 [ukp 14 pod np 30
opu np 30 pod ws 60 pw 10]
pw 5
czekaj 10
powtórz 36 [ukp [0 255 255] pod
np 30 opu np 30 pod ws 60 pw
10]
już
dr B. Woźna-Szcześniak
38
Tomek, dziewczynka i słoneczko
oto ruch
słuchaj [Tomek] ufa faza + 1
np 10 czekaj 100
słuchaj [dziewczynka] ufa faza + 1
czekaj 100
słuchaj [słonko] promienie
ruch
już
Aby żółw słonko był niewidoczny należy go schować poleceniami:
słuchaj [słonko]
sż.
2010-03-19
dr B. Woźna-Szcześniak
39
Procedura starter
Procedura Starter ma dwie istotne własności:

można ja wywołać klawiszami Ctrl + F9,

jeśli jest w projekcie uruchamia się automatycznie po
otworzeniu projektu.
oto starter
ruch
już
2010-03-19
dr B. Woźna-Szcześniak
40
Polecenie Proszę
PROSZĘ żółw lista_poleceń_Logo
PROSZĘ lista_żółwi lista_poleceń_Logo
Jeśli PROSZĘ jest poleceniem, żółw lub żółwie wskazane przez
pierwszy parametr wykonają polecenia z listy stanowiącej
drugi parametr.
Te żółwie mogą być aktualnie aktywne lub nie - stają się aktywne
na czas wykonywania danej listy poleceń.
Wszystkie żółwie wskazane przez pierwszy parametr wykonują
listę poleceń "równolegle" - w odróżnieniu od polecenia
KAŻDY, które wywołuje działanie wszystkich aktywnych żółwi
kolejno - jeden za drugim. Po wykonaniu polecenia PROSZĘ
lista KTO - aktywnych żółwi ma ponownie taką wartość, jak
przed rozpoczęciem polecenia PROSZĘ.
2010-03-19
dr B. Woźna-Szcześniak
41
Polecenie Proszę
? NOWYŻÓŁW "ADAM [10 10 90]
? POKAŻ KTO
0
? PROSZĘ "ADAM [(POKAŻ "Adam "znajduje "się "w "punkcie
POZ)]
Adam znajduje się w punkcie [10 10]
2010-03-19
dr B. Woźna-Szcześniak
42
Funkcja Proszę
PROSZĘ żółw [ wyrażenie ]
PROSZĘ lista_żółwi [ wyrażenie ]
Jeśli PROSZĘ jest funkcją, żółw lub żółwie wskazane przez pierwszy
parametr czasowo uaktywniają się i obliczana jest wartość drugiego
parametru - jest ona wynikiem funkcji.
Po obliczeniu wartości funkcji PROSZĘ, lista KTO - aktywnych żółwi
przyjmuje ponownie taką wartość jak poprzednio.
? NOWYŻÓŁW "ADAM [10 10 90]
? POKAŻ KTO
0
? (POKAŻ "Adam "znajduje "się "w "punkcie PROSZĘ "ADAM [POZ] )
Adam znajduje się w punkcie [10 10]
2010-03-19
dr B. Woźna-Szcześniak
43
Funkcja ŁADOB
ŁADOB Plik_LGW [ ]
ŁADOB Plik_LGW wycinek
Wynikiem jest obraz zapisany w pliku.
Jeśli dany plik LGW składa się z większej liczby faz niż chcemy dostać
w wyniku ŁADOB, to określamy wycinek: w postaci pary liczb:
liczba1 to numer fazy, która ma być początkiem odcinka obrazu;
zaś liczba2 określa, z ilu kolejnych faz ma się składać wybrany
segment. Drugi parametr pusty [ ] oznacza, że wynikiem ma być
cały obraz zapisany w pliku.
? PRZYP "NOWY ŁADOB "AUTA [1 2]
? POKAŻ :NOWY
{obraz2}
? PRZYPOS :NOWY
2010-03-19
dr B. Woźna-Szcześniak
44
Funkcja ŁADOB
ŁADOB Plik_LGW [ ]
ŁADOB Plik_LGW wycinek
Jeśli w danej nazwie pliku nie ma ścieżki dostępu lub jest tylko
częściowa, to plik będzie poszukiwany w podkatalogu OBRAZY
katalogu macierzystego. By zmienić to ustalenie, stosuj polecenie
USTALŚCIEŻKĘ podając jako pierwszy parametr "OBRAZY. By
znaleźć aktualne ustalenie, wywołuj funkcję ŚCIEŻKA z
parametrem "OBRAZY.
Jeśli nie jest podane żadne rozszerzenie, to ŁADOB automatycznie
dodaje .LGW. By zapisać obraz w pliku, stosuj polecenie
ZAPISZOB. By nadać żółwiowi nową postać, stosuj PRZYPOS.
2010-03-19
dr B. Woźna-Szcześniak
45
Droga
oto starter
usż wszystkie ustaleg [450 250] ut [255 255 210]
nowyżółw 0 [0 -18 90] słuchaj 0 ugp 18 ukp 7 np 450 usż 0
niech "domy ładob "domy []
niech "drzewa ładob "drzewa []
niech "auto ładob "auta [2 1]
niech "auto2 ładob "auta [4 1]
nowyżółw "dom1 [-190 -10 270]
nowyżółw "dom2 [-85 -10 270]
nowyżółw "dom3 [40 -10 270]
nowyżółw "drzewo1 [80 -10 270]
nowyżółw "sam [-20 -20 90]
nowyżółw "sam2 [-10 -23 270]
nowyżółw "drzewo2 [-140 -30 270] nowyżółw "drzewo3 [-40 -30 270]
nowyżółw "dom4 [-50 -30 270]
proszę wszystkie [pod pż]
proszę [dom1 dom2 dom3 dom4][każdy [przypos los :domy]]
proszę [drzewo1 drzewo2 drzewo3][każdy [przypos los :drzewa]]
proszę [sam][przypos :auto] proszę [sam2][przypos :auto2]
ruch
już
2010-03-19
dr B. Woźna-Szcześniak
46
Droga cd.
oto ruch
proszę [dom1 dom2 dom3 drzewo1][np 3]
proszę [drzewo2 drzewo3 dom4][np 4]
proszę "sam [np 2]
proszę "sam2 [np 6]
czekaj 10
ruch
już
2010-03-19
dr B. Woźna-Szcześniak
47
Typy danych
Oprócz grafiki żółwia, drugim charakterystycznym elementem
języka Logo są typy danych oraz sposób ich zapisu.
W Logo Komeniusz, wyróżnia się trzy typy danych. Są to: słowa,
listy, i obrazy.
2010-03-19
dr B. Woźna-Szcześniak
48
Słowa


Słowem jest ciąg dowolnych znaków, który nie zawiera separatora:
 nawiasów kwadratowych, okrągłych i klamrowych: [], (), {},
 znaków operacji arytmetycznych: +, -, *, /, (wyjątkiem jest użycie
na początku słowa znaków + lub - w odniesieniu do liczb
dodatnich lub ujemnych),
 znaków oznaczających relacje: =, <, >
 odstępu (spacji).
Słowami są np.:
 Jan_Nowak
 1994 -- liczba jest słowem.
 -7 -- liczba ujemna jest słowem.
 NAPRZÓD -- procedura jest słowem.
2010-03-19
dr B. Woźna-Szcześniak
49
Słowa





Słowami nie są np.:
 Jan Nowak -- Zawiera spację.
 [Jan_Nowak] -- Zawiera parę nawiasów klamrowych.
słowo poprzedzone cudzysłowem, czyli operatorem
dosłowności, jest traktowane jako tekst,
słowo poprzedzone dwukropkiem oznacza - w zależności od
kontekstu - parametr formalny procedury lub wartość
zmiennej,
słowo nie poprzedzone dwukropkiem i żadnym z tych znaków
jest traktowane jako wywołanie procedury,
liczby są szczególnym przypadkiem słów (tzw. słowo
numeryczne), które zapisujemy bez poprzedzającego
cudzysłowu.
2010-03-19
dr B. Woźna-Szcześniak
50
Słowa









Przykłady:
-127.13 Liczba.
Kwadrat -- Procedura o nazwie Kwadrat (jeśli została
wcześniej zdefiniowana)
"Kwadrat -- Słowo siedmioznakowe Kwadrat.
" -- Słowo puste
:Kwadrat -- Wartość zmiennej lub parametru o nazwie
Kwadrat.
":Kwadrat -- Słowo ośmioznakowe :Kwadrat.
:"Kwadrat -- Wartość zmiennej lub parametru o nazwie
"Kwadrat
Ostatnie dwa przykłady są " sztuczne" i powinno się
unikać tego typu zapisów !!!
2010-03-19
dr B. Woźna-Szcześniak
51
Jak zrobić procedurę drukującą tekst na ekranie?
oto kalkulator :obliczenia
pisz :obliczenia
już
? kalkulator 2+3
5
? kalkulator 2*3
6
? kalkulator 2-3
-1
2010-03-19
dr B. Woźna-Szcześniak
52
Procedura obliczająca kwadrat danej liczby
oto potega :x
niech "y :x * :x
pisz :y
już
potega 4
16
2010-03-19
dr B. Woźna-Szcześniak
53
Procedura obliczająca silnię
oto silnia :n
niech "w 1
niech "i 1
powtórz :n [niech "w :w * :i niech "i :i+1 ]
pisz :w
już
? silnia 5
120
? silnia 7
5040
2010-03-19
dr B. Woźna-Szcześniak
54
Procedura obliczająca sumę kolejnych liczb
naturalnych
oto suma :n
niech "s 0
niech "i 1
powtórz :n [niech "s :s + :i niech "i :i + 1]
pisz :s
już
2010-03-19
dr B. Woźna-Szcześniak
55
Listy


Lista w języku Logo jest ujętym w nawiasy kwadratowe ciągiem
słów lub list, ciąg ten może być pusty. Jest to definicja
rekurencyjna. Lista pusta, tj. [ ], ma zero elementów. Lista niepusta
ma co najmniej jeden element. Może nim być słowo lub lista.
Przykłady:
 [Ala ma kota] -- Lista trzyelementowa, której każdy element jest
słowem.
 [Ja [Ty On]] -- Lista dwuelementowa, której pierwszy element
jest słowem, a drugi element jest listą dwuelementową.
 [ ] Lista pusta.
2010-03-19
dr B. Woźna-Szcześniak
56
Sortowanie bąbelkowe
oto sortuj :l_sort
przyp "l_tmp []
przyp "x "
przyp "n długość :l_sort
powtórz :n [powtórz :n ~
[jeśli puste? bp :l_sort [przyp "l_tmp nak pierw :l_sort :l_tmp] ~
[jeśli pierw :l_sort < pierw bp :l_sort ~
[przyp "l_tmp nak pierw :l_sort :l_tmp przyp "l_sort bp :l_sort] ~
[przyp "l_tmp nak pierw bp :l_sort :l_tmp przyp "x pierw :l_sort
przyp "l_sort bp bp :l_sort ~
przyp "l_sort nap :x :l_sort]]] przyp "l_sort :l_tmp przyp "l_tmp []
pisz :l_sort]
już
2010-03-19
dr B. Woźna-Szcześniak
57

Podobne dokumenty