04. Programovací jazyk LOGO 3
Řešení úkolů z minulé kapitoly-ukázka:
Větvení programu
Větvení programu slouží ke změně činnosti programu na základě vyhodnocení průběhu programu či změně vstupních podmínek.
U jednoduššího větvení (známý příkaz IF z tabulkových procesorů) jde o prosté vyhodnocení, zda je podmínka splněna (THEN - TRUE - vykoná se zadaná činnost) nebo splněna není (ELSE - FALSE - vykoná se jiná činnost).
Pro složitější větvení využíváme přikaz SELECT
Příklad:
Vyhodnoťte, zda jde o číslo kladné či záporné
to kladne.zaporne.nula :a
if ( :a = 0 ) [print "Nula"]
if ( :a < 0 ) [print "Záporné"][print "Kladné"]
end
Poznámka: V některých aplikacích můžeme s výhodou využít generátor pseudonáhodného čísla - například pro naprogramování hrací kostky
to kostka
print ( random 7 )
end
V jazyku LOGO příkaz RANDOM, jehož výsledkem je náhodné nezáporné číslo od nuly do parametru. Příkaz RANDOM 7 tedy vrátí náhodné (pokaždé jiné) číslo od nuly do šesti.
Námět na volné večery - s pomocí výše uvedeného a toho, že uumíme kreslit čtverce a kružnice je možno (příkaz IF) vytvořit naprogramovat hrací kostku.
Rekurze
Rekurze patří mezi základní programátorské prostředky. Fukce volá sama sebe. Výsledkem je jednodušší zápis. Nevýhodou jsou nároky na paměť, problémy s ukončením rekurze i pochopením funkce programu.
Příklad - strom
Naprogramujte proceduru, která nakreslí strom. Parametry budou velikost kmene a počet rozvětvení
Strom má rekurzivní tvar - každou větev můžeme totiž považovat za malé stromy
to strom :kmen :pocet
if :pocet = 0 [stop]
forward :kmen
left 45
strom ( :kmen / 2 ) ( :pocet - 1 )
right 90
strom ( :kmen / 2 ) ( :pocet - 1 )
left 45
back :kmen
end
Vysvětlete jednotlivé kroky programu
Příklad - sněhová vločka
to snehova.vlocka :velikost :pocet
repeat 3 [strana :velikost :pocet right 120]
end
to strana :velikost :pocet
if :pocet = 0 [forward :velikost stop]
strana ( :velikost / 2 ) ( :pocet - 1 )
left 60
strana ( :velikost / 3 ) ( :pocet - 1 )
right 120
strana ( :velikost / 3 ) ( :pocet - 1 )
left 60
strana ( :velikost / 3 ) ( :pocet - 1 )
end
Klasickým příkladem na rekurzi je výpočet faktoriálu
Víme, že např. 5!=5.4.3.2.1
Výpočet faktoriálu bez použití rekurze:
to faktorial :n
local "a
make "a :n
local ":v
make "v 1
repeat :n [make "v ( :v * :a ) make "a ( :a - 1 )]
output :v
end
Je jistě zcela zřejmé, jak probíhá výpočet. Pokud ne, tak si projděte řádky níže uvedené (příklad pro výpočet 4!)
n!=n(n-1)(n-2)... . 1
Kroky programu:
lokální proměnná a=n=4
lokální proměnná v=1
4 krát se opakuje:
v = 1 . 4 a = 4 - 1
4 3
v = 4 . 3 a = 3 - 1
12 2
v = 12 . 2 a = 2 - 1
24 1
v = 24 .1 a =0
Výsledkem je hodnota 24.
Výpočet faktoriálu s použitím rekurze:
to faktorial2 :n
if :n > 1 [output :n * faktorial2 :n - 1][output 1]
end
Je zřejmé, že pomocí rekurze lze zapsat kód výrazně úsporněji.
Úkoly na samostatnou práci
1. Zapište funkci pro výpočet kombinačního čísla.
(Nápověda -