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