Jezyki i metody programowania WYKŁAD 5 i 6 Logo. Animacje. Dr Bożena Woźna-Szcześniak bwozna@gmail.com 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 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 2010-03-19 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] 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] ------------------------------------------------------------------------------------- :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 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] oto gwiazda powtórz 6 [romb pw 60] ------------------------------------------------------------------------------------- :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 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 oto animowaneserce powtórz 20 [ niech "x losowa 14 ukp :x cs serce czekaj 400] 2010-03-19 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 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 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 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 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 2010-03-19 dr B. Woźna-Szcześniak 13
Animacja światła drogowe oto starter sygnalizacja 100 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 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 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 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 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 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 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 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ż] 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: 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. 2010-03-19 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 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 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. 2010-03-19 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: Plik- Zapisz 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] ufa faza + 1 np 10 czekaj 100 słuchaj [dziewczynka] ufa faza + 1 czekaj 100 ruch Po poleceniu Słuchaj tylko wymienione w nim żółwie są aktywne i będą słuchały poleceń. Wszystkie inne są pasywne, tzn. nadal istnieją, ale śpią aż do chwili, gdy je zbudzimy (np. poleceniem Słuchaj). 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. 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] 2010-03-19 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 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 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 [ ] Wynikiem jest obraz zapisany w pliku. ŁADOB Plik_LGW wycinek 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 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 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? 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 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? 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 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] 2010-03-19 dr B. Woźna-Szcześniak 57