Strona o programowaniu w języku LOGO

Polecenia i Funkcje

Procedury Logo dzielą się na polecenia i funkcje.

Polecenia mają określony skutek, na przykład: wydrukowanie tekstu na ekranie, przemieszczenie żółwia, zmiana ustawień, zakończenie pracy w Logo itd.. Dlatego w opisie polecenia trzeba określić jego skutek.

Funkcje mają określony wynik - wartość. Dlatego w opisie funkcji, trzeba określić, jaka będzie jej wartość dla określonych danych. Wynik funkcji może być daną innych procedur.

Funkcja pierwotne

polecenie skrót wyjaśnienie typ
pwk
 liczba
  Wynikiem jest pierwiastek kwadratowy danej liczby.
Dana liczba musi być nieujemna.
F
abs
 liczba
  Wynikiem jest wartość bezwzględna danej liczby. F
int
 liczba
  Wynikiem jest część całkowita danej liczby, jaką otrzymujemy po odrzuceniu części ułamkowej. F
losowa
 liczba
  Wynikiem jest losowo wybrana liczba z zakresu od 0 do n-1,
gdzie n to dana liczba, która nie może być ujemna (jeśli jest niecałkowita –zostanie zaokrąglona).
Na przykład, wynikiem losowa 5 może być 0, 1, 2, 3 lub 4.
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
reszta
 liczba1 liczba2

mod
 liczba1 liczba2
  Wynikiem jest reszta z dzielenia liczby1 przez liczbę2.
Znak wyniku jest zawsze taki jak znak liczby1. Zamiast nazwy reszta można użyć mod.
F
numpow npw Wynikiem jest numer aktualnego powtórzenia danej listy poleceń.
Funkcji numpow można używać tylko w konstrukcjach powtórz, dla, dopóki i dlaKażdego. Jej wynikiem jest zawsze dodatnia liczba całkowita, informująca o liczbie wykonanych powtórzeń danej listy poleceń ( licząc z bieżącym).
oto spirala.Iteracyjna
 powtórz 100 [np npw * 2 pw 90]
już
F

∗ typ    p – polecenie pierwotne    f – funkcja pierwotna

Polecenia służące do zatrzymywania procedur i funkcji

polecenie skrót wyjaśnienie typ
wynik
 cokolwiek
wy Deklaruje, że dane cokolwiek ma być wynikiem aktualnie obliczanej funkcji.
Polecenia wynik można użyć tylko w treści funkcji użytkownika, nie można jej używać w definicji polecenia.
Polecenie wynik zatrzymuje wykonywanie procedury, w której treści wystąpiło.
P
stop   Zatrzymuje aktualnie wykonywaną procedurę i przekazuje sterowanie do procedury, która ją wywołała.
Jeśli takiej procedury nie ma – zostaje zatrzymany cały proces. Polecenia stop można użyć tylko w treści procedury użytkownika.
P

Przypomnienie: Jeżeli z jakis powodów (najczęściej błąd w samej procedurze) nie mozna zatrzymać działania procedury, mozna to zrobić rącznie naciskając klawisz F12, co spowoduje zatrzymanie wszystkich uruchomionych procedur.

Warunki używane w procedurach i funkcjach

polecenie skrót wyjaśnienie typ
jeśli
wartość logiczna
lista-P
  Jeśli dana jest wartość logiczna prawda, wykonywana jest dana lista poleceń.
W przeciwnym przypadku, nie robi się nic i koniec – polecenie nie ma żadnego skutku.
P
jeżeli Procedura jeżeli jest poleceniem albo funkcją zależnie od typu drugiej i trzeciej danej. Jeśli są to listy poleceń, procedura jeżeli jest poleceniem. Jeśli są to ujęte w nawiasy kwadratowe wyrażenia, procedura jeżeli daje określony wynik i jest funkcją.
jeżeli
wartość logiczna
lista-P1
lista-P1
  W przypadku, gdy pierwsza dana ma wartość prawda, wykonywana jest lista1,
a w przeciwnym przypadku – lista2.
P
jeżeli
wartość logiczna
[wyrażenie1]
[wyrażenie2]
  W przypadku, gdy pierwsza dana ma wartość prawda, wykonywana jest wartość wyrażenia1, a
w przeciwnym przypadku – wartość wyrażenia2.

Żadna z danych nie może być pustą listą.
F

Funkcja użytkownika

Funkcja zdefiniowana przez Ciebie lub jakiegokolwiek innego użytkownika Logo. Pamiętaj, że definiując funkcję musisz użyć polecenia wynik (w skrócie wy). Logo po napotkaniu polecenia wynik, kończy wykonywanie procedury (podobnie jak po stop) i przekazuje daną tego polecenia jako wynik funkcji:

Mniejsza z dwóch liczb

oto min :a :b
; minimum z dwóch liczb
 jeśli :a < :b [wy :a]
 wy :b
już

Polecenia wynik można użyć tylko w treści funkcji użytkownika, nie można jej używać w definicji polecenia. Polecenie wynik zatrzymuje wykonywanie procedury, w której treści wystąpiło. Różni się od stop tym, że stop zatrzymuje wykonywanie procedury, ale nie daje wyniku.

Trójkąt prostokątny – obliczanie przeciwprostokątnej

oto trj.prost.przeciwprostokątna :a :b
 wynik pwk (:a * :a + :b * :b)
już

Droga w ruchu jednostajnie przyspieszonym

Jak pamietasz z lekcji fizyki mozemy ją wyliczyć za pomocą wzoru:
s=1/2*a*t2

oto drogaRuchJednPrzysp :a :t
 wy 0.5 * :a * t * :t
już

Kostka do gry

oto kostkaDoGry
  wy 1 + losowa 6
już

Funkcje, w których wykorzystano rekurencję

Funkcja Silnia

Silnią liczby naturalnej n (w notacji matematycznej: n!, co czytamy „n silnia”) nazywamy iloczyn wszystkich liczb naturalnych nie większych niż n.
np. 5!=1*2*3*4*5=120

oto silnia :n
 jeśli :n < 1 [wynik 1]
wynik :n * silnia :n - 1
już

? pisz silnia 12
479001600

Obliczenie 5! od strony funkcji silnia będzie wyglądać następująco:

Wywołaj silnia 5
 Wywołaj silnia 4
  Wywołaj silnia 3
   Wywołaj silnia 2
    Wywołaj silnia 1
     Wywołaj silnia 0
     Zwróć 1 ; 0! wynik wynosi 1, wróć do silnia 1
    Zwróć 1  ; 1! wynik wynosi 1*0!=1*1, wróć do silnia 2
   Zwróć 2   ; 2! wynik wynosi 2*1!=2*1, wróć do silnia 3
  Zwróć 6    ; 3! wynik wynosi 3*2!=3*2, wróć do silnia 4
 Zwróć 24    ; 4! wynik wynosi 4*3!=4*6, wróć do silnia 5
Zwróć 120    ; 5! wynik wynosi 5*4!=5*24, koniec

Wywołanie funkcji z danego kawałka kodu procedury oznacza dla żółwia wykonanie skoku w inne miejsce. Zanim go wykona, musi zapamiętać m.in. miejsce powrotu oraz wartości zmiennych.

Obliczanie silni można również wykonać iteracyjnie.
Przypomnienie: Iteracja (łac. iteratio - powtarzanie) - czynność powtarzania tej samej instrukcji (albo wielu instrukcji) w pętli.
Wskazówka: Przyjrzyj się algorytmowi przedstawionemu w podręczniku na str. 137
Funkcja silnia wykonywana iteracyjnie będzie wyglądać następująco:

oto silniaI :n
 przypisz "wynik 1
 przypisz "i 1
 jeśli :i < :n [powtórz :n - 1 [
  przypisz "i :i + 1
  przypisz "wynik :wynik * :i
  ]
 ]
 wynik :wynik
już

Słowa wynik użyto:
raz jako polecenia pierwotnego wyprowadzającego wynik procedury, a drugi raz jako nazwy zmiennej, w której przechowaany jest wynik procedury.
Zwóć uwagę, że za pomocą tej procedury (i tego algorytmu) mozna wyliczyć silnie dla liczb naturalnych nie od 0, lecz od 2. Aby objąc procedurą wszystkie liczby naturalne należałoby w drugiej linii uwglednić, poprzez polecenie jeśli przpadek, kiedy n > 2 np.:

jeśli n > 2 [wynik 1]

Przyjrzyj się przedstawionemu obok algorytmowi w postaci opisu słownego. Jeżeli zamienimy czynności 6 i 7 oraz zastosujemy w procedurze polecenie numpow (odwołamy się do numeru powtórzenia), to procedura może być krótsza:

oto silniaP :n
 przypisz "wynik 1
 powtórz :n [przypisz "wynik :wynik * npw]
 wynik :wynik
już

Potęga naturalna

Program Logomocja, co trochę dziwi, nie zawiera funkcji pierwotnej, która podnosiłaby dowolną liczbę do potęgi, możemy jednak taką funkcją napisać sami.

Funkcja realizowana iteracyjnie wygląda tak:

oto potęga :podstawa :wykładnik
 ; wykładnik należy do liczb Naturalnych
 jeśli :wykładnik = 0 [wy 1]
 przypisz "wynik.potęgowania 1
 powtórz :wykładnik [przypisz "wynik.potęgowania :wynik.potęgowania * :podstawa]
 wy :wynik.potęgowania
już

Jeszcze krótszy kod wystąpi, jeżeli użyjemy rekurencji.

oto potęgaR :podstawa :wykładnik
 ; wykładnik należy do liczb Naturalnych
 jeśli :wykładnik = 0 [wy 1]
 wynik :podstawa * potęgaR :podstawa :wykładnik - 1
już

Największy wspólny dzielnik dwóch liczb naturalnych

oto NWD :a :b
 jeśli :a = :b [wy :a]
 jeśli :a > :b [wy NWD :a - :b :b]
 wy NWD :a :b - :a
już

Funkcja została stworzona w oparciu o tzw. „Algorytm Euklidesa”, którego działanie szczegółowo zostanie omówione pózniej. Możesz się z nim jednak zapoznać wczesniej, przeglądając prezentację o algotytmach w formacie MS PowerPoint.

Ilość wystapień liczby 2 podczas rozkładu dowolnej liczby naturalnej n na czynniki pierwsze

oto lw2 :n
;Liczba wystapień liczby 2 podczas rozkładu liczby naturalnej n
;na czynniki pierwsze
 jeśli int :n <> :n [wy [Liczba n musi byc liczba naturalną >0]]
 jeśli :n <= 0 [wy [Liczba n musi byc liczba naturalną >0]]
 jeżeli reszta :n 2 = 0 [wy 1 + lw2 :n / 2] [wy 0]
już

Gra  

Wykorzystaj funkcję losowa w procedurze gra, realizującej zabawę z komputerem, która ma taki przebieg. Komputer losowo wybiera liczbę z zakresu od 1 do 1000, a zadaniem gracza jest tę liczbę odgadnąć. Komputer zlicza nieudane próby odgadnięcia liczby; liczba ta zostanie podana po jej trafieniu. Jedyną wskazówka w odgadywaniu jest informacja, czy podana przez gracza liczba jest większa, czy mniejsza od wylosowanej przez komputer.

Valid XHTML 1.0 StrictPoprawny CSS!
Copyright (c) 2009-2019. Szkoła Podstawowa nr 3 im. Mikołaja Kopernika. All rights reserved.