PODSTAWOWE PROCEDURY TEKSTOWE Programowanie w LOGO KOMENIUSZ grafika żółwia Postać polecenia Skrót Znaczenie 1. TEKSTY TS cały ekran w trybie tekstowym. ZMAŻTEKST ZT czyści ekran tekstowy 3. PISZ coś PS coś pisze coś na ekranie 4. UK [k w] ustawia kursor w kolumnie k i wierszu w 5. UKT liczba ustawia kolor tła i kolor tekstu 1. Polecenie TS zmienia obszar roboczy okna głównego na ekran tekstowy. Zmiana tego ustawienia na ekran graficzny nastąpi po wydaniu polecenia EG (cały obszar roboczy okna zmieni się na ekran graficzny), a na ekran graficzny z oknem tekstowym poleceniem DZIELEKRAN.. Polecenie ZT jest odpowiednikiem CS w trybie graficznym. 3. Polecenie PS coś jest poleceniem z jednym parametrem. Tym parametrem jest coś. W zależności od parametru PS ma dwa znaczenia: pisze dosłownie ciąg znaków coś, ciąg ten musi być poprzedzony cudzysłowem lub ujęty w nawias kwadratowy, dokonuje obliczeń wyrażenia matematycznego, pisze jego wynik. Przykłady wariantów użycia polecenia PS: PS komputer - pisze słowo komputer PS - pisze pusty wiersz PS 69 - pisze 69 PS +3 - pisze 5 (wynik dodawania) PS [klasa szósta] - pisze wyrażenie klasa szósta PS mój komputer - pojawia się komunikat błędu: nie wiem jak wykonać komputer PS mój komputer - pojawia się komunikat błędu: nie wiem co zrobić z komputer Można zwiększyć liczbę parametrów polecenia PS. Postać tego polecenia jest następująca (polecenie ujmujemy w nawiasy zwykłe): (PS coś1 coś coś3...) 4. Polecenie UK [k w] służy do ustawienia kursora na ekranie w miejscu, od którego ma być pisany tekst. Parametr [k w] ustala to miejsce, w którym k oznacza numer kolumny (współrzędna pozioma), w numer wiersza (współrzędna pionowa). Współrzędna [1 1] znajduje się w lewym górnym rogu ekranu tekstowego. Dozwolone zakresy dla k: 1-80, dla w: 1-6. Polecenie ZT ustawia kursor na pozycji [1 1]. 5. Polecenie UKT liczba ustala kolor tła i kolor tekstu. Parametr liczba ustala się przez obliczenie wyrażenia według następującego wzoru: liczba 16 * nr_koloru_tła + nr_koloru_tekstu Dopuszczalny zakres dla koloru tła i koloru tekstu: 0-15 (16 kolorów). Przykład: UKT 40 ustala tekst czarny na białym tle (16*15+040; kolor biały 15, kolor czarny 0). 1
WYKONYWANIE OBLICZEŃ W LOGO W trybie dialogu możemy wykonywać obliczenia wyrażeń arytmetycznych. Wykorzystamy do tego celu polecenie PS, którego parametrem będzie wyrażenie arytmetyczne. Zapis i obliczanie wyrażeń arytmetycznych odbywa się według takich samych zasad, jakie stosujemy w matematyce. W wyrażeniach tych używać możemy tylko nawiasów zwykłych. Funkcje pierwotne: + funkcja dodawania - funkcja odejmowania * funkcja mnożenia / funkcja dzielenia ABS n wskazuje wartość bezwzględną danej liczby SUMA a b wykonuje dodawanie liczb a i b RÓŻNICA a b wykonuje odejmowanie liczb a i b ILOCZYN a b wykonuje mnożenie liczb a i b ILORAZ a b wykonuje dzielenie liczby b przez a RESZTA a b oblicza resztę z dzielenia liczby b przez a PWK n oblicza pierwiastek kwadratowy danej liczby ENT n podaje część całkowitą liczby, odrzuca jej część ułamkową ZAOKR n zaokrągla daną liczbę do wartości całkowitej LOSOWA n losuje liczbę całkowitą z zakresu od 0 do (n-1); gdzie n 0 STARTLOS zmienia wartość początkową generatora liczb losowych Funkcja SUMA i ILOCZYN posiada dwa parametry, tzn. można wykonać obliczenia tylko na dwóch liczbach. Można zwiększyć, podobnie jak dla polecenia PS, liczbę tych parametrów. Wówczas zapis tych funkcji wygląda następująco: (SUMA liczba1 liczba liczba3...) (ILOCZYN liczba1 liczba liczba3...) Logo domyślnie wypisuje liczby dziesiętne z dwoma miejscami po przecinku. Możemy ten format liczby zmieniać. Do tego służy polecenie: UFL n ustal format liczby z liczbą miejsc po przecinku określoną przez parametr n. Dozwolony zakres parametru dla UFL: 0 18. ZMIENNE W LOGO Zmienna to obiekt, który ma nazwę i wartość. Wartością zmiennej może być słowo, lista lub obraz. Zmienne dzielimy na: tekstowe (wartością jest słowo lub lista), obrazowe (wartością jest obraz). Słowo to skończony ciąg znaków, np. 13, komputer, klasa6, ab8c, itp. Słowa, które nie są liczbą, poprzedzamy cudzysłowem. Lista to ciąg elementów oddzielonych spacją, ujęty w nawiasy kwadratowe, np. [Kasia lubi koty], [1 18 0 5]. Elementami listy są słowa. Zmienne tworzymy za pomocą poleceń pierwotnych PRZYP (PRZYPISZ) lub NAZWIJ. Ich składnia jest następująca: PRZYP nazwa_zmiennej wartość
NAZWIJ wartość nazwa_zmiennej Nazwę zmiennej przy jej tworzeniu (określaniu) poprzedzamy cudzysłowem, a jeśli ją wywołujemy (używamy) poprzedzamy dwukropkiem, np. PRZYP x 5 PS :x Wartością może być: liczba (13), zmienna (:bok), wyrażenie arytmetyczne (3+5), wyrażenie algebraiczne (:a+*:b), tekst ( komputer, [klasa szósta]), polecenia, funkcje. Funkcje sterujące w Logo: CZYTAJSŁOWO (CSW) - Logo czeka, aż wpiszemy słowo i naciśniemy ENTER CZYTAJLISTĘ (CL) - Logo czeka, aż wpiszemy listę i naciśniemy ENTER CZYTAJKLAWISZ (CK) - wynikiem jest kod ASCII znaku naciśniętego CZYTAJZNAK (CZ) - wynikiem jest znak naciśniętego klawisza ASCII znak - wynikiem jest liczba (od 0 do 55) przyporządkowana danemu znakowi. Jeśli parametrem ASCII będzie słowo, to podany będzie kod pierwszego znaku tego słowa. ZNAK liczba - wynikiem jest znak, którego liczba jest kodem. Napisanie programu komputerowego w jednej procedurze jest możliwe dla bardzo prostych przypadków. W praktyce program taki składa się z kilku procedur, które muszą być ze sobą powiązane. Przykład_1: Napisz procedurę, który wczytuje wysokość osoby (w centymetrach) oraz jego wagę (w kilogramach). Zwraca informację czy dana osoba ma niedowagę, waży prawidłowo, czy ma nadwagę, według następujących kryteriów: Niedowaga jeżeli (waga < wzrost/.5), Waga normalna jeżeli (wzrost/.5 < waga < wzrost/.3), Nadwaga jeżeli (wzrost/.3 < waga). oto waga ts zt ps [Program sprawdza twoją wagę] ps [Podaj wzrost w cm.] przyp "wz csw ps [Podaj wagę w kg.] przyp "wg csw jeśli :wg < :wz /.5 [pisz [Masz niedowagę]] jeśli i ( :wg > :wz /.5 ) ( :wg < :wz /.3 ) [pisz [Waga normalna]] jeśli ( :wz /.3 < :wg ) [pisz [Masz nadwagę]] Przykład_: Napisz procedurę, która oblicza pierwiastki funkcji kwadratowej ax^ + bx + c 0 oto kwad 3
ts zt ps [Program oblicza pierwiastki funkcji kwadratowej ax^ + bx + c 0] ps [Podaj a] przyp "a csw ps [Podaj b] przyp "b csw ps [Podaj c] przyp "c csw jeśli :a 0 [ps [To nie jest funkcja kwadratowa] stop] przyp "d :b * :b - 4 * :a * :c jeśli :d > 0 [przyp "x1 ( - :b - pwk :d ) / * :a ~ przyp "x ( - :b + pwk :d ) / * :a ( ps [x1 ] :x1 [x ] :x )] jeśli :d 0 [przyp "x1 ( - :b / * :a ) ( ps [x1 x ] :x1 )] jeśli :d < 0 [ps [Brak rozwiązań]] Przykład_3: Napisz grę zgadnij liczbę. Oto założenia do tej gry: komputer losuje liczbę w zakresie od 1 do 100, którą ma zgadnąć użytkownik, po każdej próbie użytkownik będzie informowany: czy podana liczba jest za duża, za mała lub równa wylosowanej, w przypadku zgadnięcia liczby wyświetlany będzie komunikat informujący o zgadnięciu liczby ze wskazaniem liczby podejmowanych prób (licznik). oto gra ts zt przyp "l 0 przyp "a 1 + losowa 100 zgaduj zt ( ps "Liczbę :a [zgadłeś za] :l "razem ) oto zgaduj ps [Podaj liczbę 1-100] przyp "b csw jeśli liczba? :b [zgaduj1][ps [to nie jest liczba, próbuj dalej] zgaduj] oto zgaduj1 jeśli :b > :a [przyp "l :l + 1 ps [za duża, próbuj dalej] zgaduj] jeśli :b < :a [przyp "l :l + 1 ps [za mała, próbuj dalej] zgaduj] Zadania do wykonania na zajęciach: 1. Napisz procedurę, która wczytuje długość wyrażoną w centymetrach, jako wynik drukuje długość wyrażoną w calach. Zabezpiecz program tak aby nie można było wczytać długości ujemnej.. Napisz procedurę, która wczytuje trzy liczby, jako wynik drukuje liczbę największą. 3. Napisz procedurę, która wczytuje trzy liczby a, b, c. Program sprawdza czy liczba c należy do przedziału (a;b>. 4
Funkcje w logo Funkcja różni się od zwykłej procedury tym, że zwraca pewną wartość. W związku z tym ponadto jeżeli wywołujemy funkcję, to musimy powiedzieć co chcemy zrobić z tą wartością podstawić ją pod jakąś zmienną, czy umieścić jako parametr procedury. Funkcje liczbowe (których wynik jest liczbą) predefiniowane w logo (pierwotne) to między innymi: ABS (moduł) ARCTAN (arctg) COS EXP (exponent) ILOCZYN ILORAZ ILORAZC (całkowity) INT (część całkowita) LN (logarytm) LOSOWA PWK (pierwiastek) RÓŻNICA RESZTA (reszta z dzielenie pierwszego parametru przez drugi) SIN SUMA TAN (tg) ZAOKR Możemy też definiować własne funkcje. Sposób postępowania jest podobny jak w przypadku procedur. Ogólna postać funkcji jest taka sama jak procedury różni ją od niej tylko obecność słowa wynik, po którym wpisujemy to co ma być zwracane przez funkcję. UWAGA: Wynik kończy działanie funkcji tzn. jeśli napiszemy wynik, a następnie np. pisz "coś, to polecenie pisz nie będzie wykonane. Oto przykład funkcji. Poniżej zdefiniowana jest funkcja kwadratowa (yax^+bx+c): OTO KWADRATOWA :X :A :B :C WYNIK :A * :X * :X + :B * :X + :C JUŻ Funkcja liczbowa postaci: 3 - x dla x z przedziału <, +nieskonczonosc ) y x dla x z przedzialu (-,) -x dla x z przedzialu (-nieskonczonosc, -> oto fun :X jeśli :X > [wy abs 3 - :X][jeśli :X < - [wy -1 * :X][wy * :X]] 5
Funkcje logiczne Funkcjami logicznymi są funkcje zwracające wartość logiczną prawda albo fałsz. Takie funkcje można potem zastosować przy sprawdzaniu warunków. Np. Funkcja sprawdzająca czy dane a b c mogą być długościami boków trójkąta OTO TRÓJKĄT? :A :B :C WY ( I ( :A < :B + :C ) ( :B < :A + :C ) ( :C < :B + :A ) ) JUŻ Którą następnie można zastosować w następnej funkcji: OTO PISZ_CZY_TRÓJKĄT :A :B :C JEŚLI TRÓJKĄT :A :B :C [PISZ [TO JEST TRÓJKĄT]] [PISZ TRÓJKĄT]] JUŻ [TO NIE JEST W procedurze TRÓJKĄT? Został użyty spójnik logiczny I. Użycie standardowo I (oraz LUB) używa się z dwoma parametrami, które muszą być stałymi logicznymi (prawda, fałsz) lub wyrażeniami logicznymi (np. :a < 0). Jeżeli chcemy użyć I lub LUB z więcej niż dwoma parametrami umieszczamy całość w nawiasie okrągłym. Mówi się wtedy że jest to postać zachłanna funkcji. Zadanie_1 Napisz funkcję która oblicza pole trójkąta na podstawie długości jego boków. Skorzystaj ze wzoru Herona. Algorytm: 1. Oblicz połowę obwodu trójkąta Ob(a+b+c)/.. Oblicz pole ze wzoru Ppwk(Ob*(Ob-a)*(Ob-b)*(Ob-c)). Układ równań Układ równań liniowych można określić jednoznacznie przez podanie jego współczynników. A zatem układ równań : ax + by dx + ey c f można opisać w ten sposób, że podajemy jego współczynniki zapisane w prostokątnej tablicy (zwanej macierzą): a b c. d e f W praktyce okazuje się, że łatwiej posługiwać się macierzami kwadratowymi. W naszym przypadku będą one wyglądać następująco: a b c b a c,,. d e f e d f Każdej macierzy kwadratowej przypisuje się pewną liczbę, która nazywa się wyznacznikiem. 6
a b DEFINICJA: Wyznacznikiem macierzy nazywamy liczbę ae db, d e a b a b którą oznaczamy. Mamy więc ae db. d e d e Oznaczenia: Układu równań : ax + by dx + ey c f WYZNACZNIK GŁÓWNY (charakterystyczny) UKŁADU W a d b e WYZNACZNIK ZE WZGLĘDU NA ZMIENNĄ X W x c f b e WYZNACZNIK ZE WZGLĘDU NA ZMIENNĄ Y W y a d c f Jeśli znamy te trzy wyznaczniki, to możemy określić zbiór rozwiązań układu ax + by c dx + ey f. Układ równań pierwszego stopnia z dwiema niewiadomymi ax + dx + by ey c, f, gdzie gdzie a d + + b e > > 0 0 1. ma tylko jedno rozwiązanie Wx x W Wy y W, jeśli W 0.. ma nieskończenie wiele rozwiązań, jeśli W W x W y. 3. nie ma rozwiązań, jeśli W 0 i przynajmniej jeden z wyznaczników W x, W y jest różny od zera, co można zapisać następująco : W 0 ( W x 0 W y 0 ). 7
Schemat blokowy algorytmu Programowanie w LOGO KOMENIUSZ grafika żółwia Zadanie_ Na podstawie powyższej teorii napisz kilka funkcji: 1. wyznacznik :a :b :d :e. wyznacznikx :b :c :e :f 3. wyznaczniky :a :c :d :f 4. iks :wyznacznikx :wyznacznik 5. igrek :wyznaczniky :wyznacznik oraz procedurę oblicz, która wczytuje współczynniki równań, a następnie w zależności od warunków drukuje odpowiednie informacje. 8
Zadanie_3 Napisz funkcję potega :x :n oto potega :x :n przyp "i 0 przyp "s 1 powtórz :n [przyp "s :s * :x] wy :s 9