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.
polecenie | skrót | wyjaśnienie | typ |
---|---|---|---|
pwkliczba |
Wynikiem jest pierwiastek kwadratowy danej liczby. Dana liczba musi być nieujemna. |
F | |
absliczba |
Wynikiem jest wartość bezwzględna danej liczby. |
F | |
intliczba |
Wynikiem jest część całkowita danej liczby , jaką otrzymujemy po odrzuceniu części ułamkowej. |
F | |
losowaliczba |
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 | |
resztaliczba1 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 |
F |
∗ typ p – polecenie pierwotne f – funkcja pierwotna
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.
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,
|
P | |
jeżeli wartość logiczna [wyrażenie1] [wyrażenie2]
|
W przypadku, gdy pierwsza dana ma wartość prawda, wykonywana jest wartość wyrażenia1, a Żadna z danych nie może być pustą listą. |
F |
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:
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.
oto trj.prost.przeciwprostokątna :a :b
wynik pwk (:a * :a + :b * :b)
już
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ż
oto kostkaDoGry
wy 1 + losowa 6
już
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ż
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ż
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.
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ż
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.