<< home >>
Didaktické využitie mini-jazyka Robot Karel na ZŠ
<<- ->>


  • Karel 3.2

KAREL 32

Programovací mini-jazyk Robot Karel 3.2 je freeware. K programu je podrobná dokumentácia a zdrojové texty. 


karel32


Prečo Karel 3.2

Prostredie, postavička (šípka) a vzhľad miestnosti sú síce menej atraktívne, ale o to bližšie prostrediu turbo pascalu od spoločnosti Borland. V ľavej polovici obrazovky je okno na písanie a editáciu zdrojového textu programu. Pri písaní programu možno používať klávesové skratky, napr. pre kopírovanie, vkladanie, zmazanie slova, riadku, nastavenie záložky a pod. 

Príkazy Karla sú rozšírené o príkazy maluj "znak", návrat, stop, čekej, o funkcie klávesa, náhoda, znak, o podmienky miesto, pravda, nepravda, o premenné, o polia a i.

Žiak môže používať české alebo anglické užívateľské rozhranie, české alebo anglické kľúčové slová, príkazy, samozrejme môže Karla naučiť po slovensky. Doporučujem užívateľské rozhranie, kľúčové slová, príkazy a pomoc (help) používať v anglickom jazyku.

V prostredí je kvalitne spracované ladenie programu (debugger), ktoré umožňuje ladiť program krokovaním cez jeden riadok, jednu procedúru, jednu inštrukciu, umožňuje zastaviť program na vopred vloženom bode zastavenia (breakpoint). 

Štruktúra programu

PROCEDURE meno
  blok prikazov
END

Program sa skladá z procedúr. Každá procedúra obsahuje postupnosť príkazov a má svoje meno, ktoré nesmie začínať číslom. Každá procedúra začína vyhradeným slovom PRÍKAZ (PROCEDURE), za ktorým je jej meno, a končí slovom KONEC (END). Príkazy v tele procedúry sa pre prehľadnosť zvyknú písať každý na jeden riadok, ale je možno písať na jeden riadok aj viac príkazov oddelených bodkočiarkou. Do programu je tiež možno písať komentár medzi reťazce /* a */ (aj viacriadkový) alebo za reťazec // (do konca riadku). V programe nezáleží na poradí procedúr. Žiadna procedúra nie je hlavným programom. Ďalej uvádzam štruktúry jednotlivých prvkov Karla 3.2, kde blok príkazov môže byť jeden príkaz, postupnosť viacerých príkazov, alebo iný štruktúrovaný prvok jazyka (napr. vnorená podmienka).

Podmienený príkaz

IF podmienka 
  blok prikazov 1
ELSE
  blok prikazov 2
END

V Karlovi 3.2 existuje aj konštrukcia viacnásobného vetvenia programu. Číselný výraz je porovnávaný s viacerými výrazmi a podľa pravdivosti zhody sa vykonávajú ďalšie bloky príkazov.


SWITCH vyraz
CASE vyraz 1
  blok prikazov 1
CASE vyraz 2
  blok prikazov 2
CASE vyraz 3
  blok prikazov 3
...
ELSE
  blok prikazov X
END

Cyklus

Cyklus s podmienkou na začiatku, ak podmienka prestane byť splnená, cyklus skončí, nemusí prebehnúť ani raz.


WHILE podmienka
  blok prikazov
END


Cyklus s podmienkou na konci, ak je podmienka splnená, cyklus skončí, musí prebehnúť aspoň raz.


REPEAT
  blok prikazov
UNTIL podmienka


Cyklus s podmienkou na začiatku aj na konci. Cyklus skončí ak prestane byť splnená podmienka na začiatku alebo ak je splnená podmienka na konci cyklu. Nemusí prebehnúť ani raz.


WHILE podmienka
  blok prikazov
UNTIL podmienka


Cyklus s presným počtom opakovaní.


REPEAT pocet_krat
  blok prikazov
END


Cyklus s presným počtom opakovaní a ešte podmienkou na konci. Cyklus skončí ak je podmienka splnená alebo ak prebehne počet opakovaní.


REPEAT pocet_krat
  blok prikazov
UNTIL podmienka

Nekonečný cyklus.


REPEAT
  blok prikazov
END


Príkazy

Okrem základných (STEP, LEFT, RIGHT, PICK, PUT): 
RETURN ukončí vykonávanú procedúru
STOP zastaví program
DELAY cislo čaká daný počet milisekúnd (ak číslo je -1, čaká na stlačenie klávesy
PAINT vypíše (zobrazí, namaluje) znak (viď. ASCII)

Funkcie

CHAR vracia znak, ktorý sa nachádza pod Karlom
RANDOM (n) vracia náhodné číslo z intervalu (0 až n-1)
KEY prečíta znak z klávesnice, vracia jej ASCII hodnotu
LENGHT vracia počet prvkov poľa (viď. Pole)

Žiak si môže naprogramovať svoje vlastné funkcie, úvodné kľúčové slovo má tvar FUNCTION.

Podmienky

Okrem základných (WALL, MARK, NORTH, WEST, SOUTH, EAST):
SPACE podmienka je splnená, ak sa dá položiť značka
TRUE podmienka je vždy splnená
FALSE podmienka nie je nikdy splnená

Podmienky možno spájať logickými operátormi (NOT, AND, OR). Podmienky nevracajú číselný, ale logický (boolean) výraz. Žiak si môže naprogramovať svoje vlastné podmienky, úvodné kľúčové slovo má tvar CONDITION.

Premenné

Počas behu programu je často potrebné zapamätať si nejaké číslo a neskôr ho použiť. Na to slúžia premenné. Premenné sa vytvárajú (deklarujú) príkazom INTEGER, za ktorým nasledujú názvy premenných (identifikátory) oddelené čiarkami. Tým sa v pamäti počítača vyhradí pamäťové miesto na zapamätanie údajov. Keď žiak chce uložiť číslo do premennej (priradiť identifikátoru premennej hodnotu), napíše názov premennej rovná sa číselný výraz. Keď chce hodnotu z premennej prečítať, napíše názov premennej kdekoľvek v číselnom výraze. Nie je možné vytvárať globálne premenné pre celý program, každá procedúra musí mať definované svoje lokálne premenné, ktoré po skončení procedúry zanikajú.

Procedúry s parametrami

Procedúry, funkcie alebo podmienky môžu mať parametre. Keď je taká procedúra volaná, musia byť zadané hodnoty, ktoré sa predajú procedúre. V definícii procedúry sú názvy parametrov uvedené v zátvorkách za názvom procedúry. Tieto názvy potom nesmú byť použité v deklarácii premenných (v príkaze INTEGER). Vnútri procedúry sa s parametrami pracuje rovnako ako s premennými. 

Pole 

Keď je potrebné uložiť do pamäte väčšie množstvo čísel, použije sa pole. Pole sa vytvára (deklaruje) podobne ako obyčajná premenná, ale za názov poľa sa do hranatých zátvoriek napíše počet prvkov poľa. Tento počet nemusí byť konštanta, napríklad je možné, aby veľkosť poľa závisela od parametra procedúry. K jednotlivým prvkom poľa sa pristupuje napísaním názvu poľa a za ním v hranatých zátvorkách poradie prvku v poli. Prvý prvok poľa je na nultom mieste! Počet prvkov v poli sa dá zistiť funkciou LENGHT.

Je možné vytvárať viacrozmerné polia. Napríklad pole A[5][6] bude obsahovať 30 prvkov usporiadaných do 5 riadkov a 6 stĺpcov. Funkcia LENGHT(A) vráti hodnotu 5 a funkcia LENGHT(A[0]) vráti hodnotu 6. Príkaz A[0][1]=8 priradí hodnotu 8 do prvku v prvom riadku a v druhom stĺpci v poli A.

ASCII

Každý znak na klávesnici (ale nielen ten) je pre počítač reprezentovaný istou konkrétnou číselnou hodnotou, kódom. Väčšinou sa používa ASCII (American Standard Code for Information Interchange) kód, kde 8 bitov vytvára 256 rôznych znakov (v binárnej sústave 28 = 256 v desiatkovej). Prvých 32 znakov je obsadené špeciálnymi riadiacimi znakmi a horná oblasť, nad 127, sa používa pre definovanie národných symbolov (diakritika). Tak napríklad znak A má ASCII hodnotu 65, ale znak a má ASCII hodnotu 97 (viď. program Ritkej.exe na CD-ROM prílohe v adresári Pascal). Karel 3.2 využíva ASCII hodnoty v príkaze PAINT a vo funkcii KEY.

PAINT 'a' vypíše znak a (zápis znaku medzi apostrofmi)
PAINT 97 tiež vypíše znak a (zápis ASCII hodnotou znaku)

INTEGER z deklarácia premennej z
DELAY -1 čakanie na stlačenie klávesy
z=KEY premennej z sa priradí ASCII hodnota stlačenej klávesy

Napr. ak sa stlačila šípka pre posun kurzora hore, premenná z bude mať hodnotu 72 (viď. riešená úloha pisaci_stroj).


Riešené úlohy Karel 3.2

příkaz obrad
opakuj 4
dokud není zeď
dokud je místo
polož
čekej 20
konec
krok
konec
vlevo
konec
konec

procedure e_obrad
repeat 4
while not wall
while is space
put
delay 20
end
step
end
left
end
end

příkaz pyramida
číslo i
i=28; krok
opakuj
opakuj i
maluj i
čekej 20
krok
konec
když je západ
id_sever_vych
jinak
id_sever_zap
konec
i=i-2
až i=0
domov
konec

procedure e_pyramida
integer i
i=28; step
repeat
repeat i
paint i
delay 20
step
end
if is west
e_id_sever_vych
else
e_id_sever_zap
end
i=i-2
until i=0
e_domov
end

příkaz id_sever_vych
smer_sever
krok
vpravo
krok; krok
konec

procedure e_id_sever_vych
e_smer_sever
step
right
step; step
end

příkaz id_sever_zap
smer_sever
krok
vlevo
krok; krok
konec

procedure e_id_sever_zap
e_smer_sever
step
left
step; step
end

příkaz smer_sever
dokud není sever
vlevo
konec
konec
procedure e_smer_sever
while not north
left
end
end

příkaz domov
smer_sever
opakuj 2
vlevo
dokud není zeď
krok
čekej 20
konec
konec
vlevo
konec

příkaz e_domov
e_smer_sever
repeat 2
left
while not wall
step
delay 20
end
end
left
end

příkaz opilec_1
číslo n_max, n
n_max=3
opakuj
n=náhoda(n_max)
zvolit n
případ 0
vlevo; test
případ 1
vlevo; vlevo; test
případ 2
vpravo; test
konec
konec
konec

příkaz test
číslo t_max, t
t_max=3
t=náhoda(t_max)+1
opakuj t
dokud je místo
polož
konec
když není zeď
krok
jinak
návrat
konec
konec
konec
příkaz opilec_2
číslo n_max, n
n_max=3
opakuj
n=náhoda(n_max)
zvolit n
případ 0
vlevo; test
případ 1
vlevo; vlevo; test
případ 2
vpravo; test
konec
konec
konec

příkaz test
číslo t_max, t
t_max=20
t=náhoda(t_max)+1
když t=1
když je místo
polož
konec
konec
když není zeď
krok
konec
konec

příkaz cistic_1
číslo n_max, n
n_max=3
opakuj
n=náhoda(n_max)
zvolit n
případ 0
vlevo; test
případ 1
vlevo; vlevo; test
případ 2
vpravo; test
konec
konec
konec

příkaz test
dokud je značka
zvedni
konec
když není zeď
krok
konec
konec

příkaz cistic_2
číslo n_max, n
n_max=3
opakuj
n=náhoda(n_max)
zvolit n
případ 0
vlevo; test
případ 1
vlevo; vlevo; test
případ 2
vpravo; test
konec
konec
konec

příkaz test
číslo t_max, t
t_max=4
t=náhoda(t_max)+1
opakuj t
dokud je značka
zvedni
konec
když není zeď
krok
jinak
návrat
konec
konec
když není zeď
krok
konec
konec

příkaz pisaci_stroj      // STABY HLAVNY PROGRAM
/*
END Koniec programu
SIPKY Pohyb kurzora
DELETE Vymazanie znaku
ENTER Novy riadok
TAB Zmazanie plochy
*/
číslo z // deklaracia premennej
z=32 // ASCII kod medzery (vymaz)
cls
opakuj
čekej -1 // Funkcia stlacenia klavesy
z=klávesa
zvolit z // Podmienka vetvenia (<case z of>)
případ -75 // sipka vlavo
id_vlevo
případ -77 // sipka vpravo
id_vpravo
případ -72 // sipka hore
id_hore
případ -80 // sipka dole
id_dole
případ 13 // enter
riadok
případ -83 // delete
del
případ -79 // end
návrat
případ 9 // tab
cls
jinak // ina klavesa(else)
pis(z)
konec
konec
konec

příkaz id_vlevo // POSUN KARLA VLAVO
vlevo; vlevo
když je zeď // Test steny
vlevo; vlevo; návrat // Vystup z podprogramu
jinak
krok; vlevo; vlevo
konec
konec

příkaz id_vpravo // POSUN KARLA VPRAVO
když je zeď // Test steny
návrat // Vystup z podprogramu (return)
jinak
krok
konec
konec

příkaz id_hore // POSUN KARLA HORE
vlevo
když je zeď // Test steny
vpravo; návrat // Vystup z podprogramu
jinak
krok; vpravo
konec
konec

příkaz id_dole // POSUN KARLA DOLE
vpravo
když je zeď // Test steny
vlevo; návrat // Vystup z podprogramu
jinak
krok; vlevo
konec
konec

příkaz riadok // POSUN KARLA NA ZAC. NOVEHO RIADKU
vpravo;
když není zeď // Test na posledny riadok
krok; vpravo
jinak
zacni; návrat // Vykona sa podprogram "zacni" a vystup
konec
dokud není zeď
krok
konec
vpravo; vpravo
konec

příkaz del // KAREL VYMAZE ZNAK
maluj ' '
konec

příkaz zacni // KAREL IDE VLAVO HORE
dokud není východ
vlevo
konec
opakuj 2
vlevo
dokud není zeď
krok
konec
konec
vlevo
vlevo
konec


příkaz cls // KAREL ZMAZE PLOCHU
zacni
opakuj 20 // 20 riadkov (<for i:=1 to 20 do>)
dokud není zeď
pis(32) // Medzera
konec
maluj ' ' // Znak v stlpci vpravo
riadok
konec
konec

funkce pis(z) // KAREL PISE STLACENY ZNAK
maluj (z)
když není zeď // Testuje posun vpravo
krok
jinak
riadok
konec
konec

Tradičný dowňák
<<- ->>