Obsah
�vod
A�koliv je robot Karel zn�m ji� dlouho, nikde jsme nena�li n�jak� standard, jak m� vypadat syntaxe tohoto jazyka. Ka�d� Karel, se kter�m jsme se setkali (Hlavn� na 8-mi bitov�ch po��ta��ch.) m�l syntaxi poka�d� jinou. Z tohoto d�vodu jsme definovali svou vlastn� syntaxi. Princip programov�n� robota je jednoduch�. Robot zn� element�rn� povely, a tak� n�jak� p��kazy ��zen� (podm�nky, cykly). Dal�� nov� povely lze vytv��et jako posloupnosti ji� zn�m�ch p��kaz� pomoc� procedur. Nov� povel, kter� je definov�n m��e b�t d�le pou��v�n jako zn�m� povel. Je�t� v�m jen doporu�ujeme nov� procedury vytv��et v prost�ed� programu KAREL, ne v n�jak�ch jin�ch textov�ch editorech, i kdy� zde tato mo�nost je. U�et��te si t�m mnoho nep��jemnost�. V�echny p��klady, kter� jsou v t�to n�pov�d� nemus�te opisovat. Naleznete je v souboru help.krl, kter� je distribuov�n spole�n� s Karlem. Douf�me, �e syntaxe pro v�s bude lehce pochopiteln�.
Kl��ov� slova
Kl��ov� slova v jazyku Karel jsou element�rn� povely, podm�nky, nebo cykly. Dal�� kl��ov� slova jsou slova "Procedure", a "Jinak" Jazyk Karel nerozli�uje mezi velk�mi a mal�mi p�smeny. Tedy "KROK" je to sam� jako "Krok", nebo "krok" (Nebo i t�eba "kROk".).
- Element�rn� povely: Krok, Polo�, Zvedni, Vlevobok
- Podm�nky: JeCihla, JeZe�, JeSever
- Cykly: Dokud, Dokud ne
- Dal��: Procedure, Jinak
Element�rn� povely
Element�rn� povely jsou povely, kter�m robot Karel rozum�, a provede jako reakci na n� n�jakou �innost. Jsou d�le "ned�liteln�". Neskl�daj� se z ��dn�ch povel�, a naopak v�echny ostatn� u�ivatelem definovan� procedury jsou z nich slo�en�. Element�rn� povely jsou:
Krok
Karel provede krok. Posune se tedy o jedno pole ve sm�ru, ve kter�m byl oto�en, a sv�j sm�r nezm�n�. St�l-li Karel p�ed proveden�m povelu Krok p�ed zd�, dojde k chyb�.
Polo�
Karel polo�� cihlu na pole, na kter�m stoj�. Neposune se na ��dn� pole, ani se neoto�� jin�m sm�rem. Maxim�ln� po�et cihel na jednom poli lze v programu nastavit. Dojde-li k p�ekro�en� maxim�ln�ho povolen�ho po�tu cihel na poli, na n�m� Karel st�l p�ed proveden�m povelu Polo�, dojde k chyb�.
Zvedni
Karel vezme (odstran�) cihlu na poli, ne kter�m stoj�. Neposune se na ��dn� pole, ani se neoto�� jin�m sm�rem. Jestli�e ji� na poli, na n�m� Karel st�l p�ed proveden�m povelu Zvedni, nen� cihla (Je pr�zdn�.), dojde k chyb�.
Vlevobok
Karel se oto�� do leva. Z�stane st�t na poli, na n�m� st�l p�ed proveden�m povelu, a nevezme, ani nepolo�� ��dnou cihlu.
Podm�nky (V�tven�)
Podm�nky slou�� pro lep�� ��zen� robota. Pomoc� podm�nky lze odd�lit posloupnost povel�, jen� se m� prov�st v p��pad�, �e podm�nka je pravdiv�, od povel�, jen� zde maj� prov�st nen�-li podm�nka pravdiv�. Syntaxe podm�nky je:
Podm�nka { #Posloupnost povel�, jen� se maj� prov�st v p��pad�, #�e podm�nka plat�. Nemus� zde b�t ��dn� povel, ale #mus� zde b�t slo�en� z�vorky. } Jinak { #Posloupnost povel�, jen� se maj� prov�st v p��pad�, #�e podm�nka neplat�. Nemus� zde b�t rovn� ��dn� povel, #ale mus� zde b�t slo�en� z�vorky. V p��pad�, #�e by za slovem JINAK m�ly b�t jen pr�zdn� z�vorky, #je lep�� slovo JINAK vynechat. Viz druh� mo�nost. }
Druh� mo�nost:
Podm�nka { #Posloupnost povel�, jen� se maj� prov�st v p��pad�, #�e podm�nka plat�. Nemus� zde b�t ��dn� povel, #ale mus� zde b�t slo�en� z�vorky. }
Podm�nky
JeSever
Podm�nka je platn� v p��pad�, �e Karel je oto�en k severu (nahoru).
JeZe�
Podm�nka je pravdiv� v p��pad�, �e Karel stoj� p�ed zd�. Je tedy v takov� poloze, a tak oto�en�, �e kdyby ud�lal Krok, narazil by do zdi.
JeCihla
Podm�nka je platn� v p��pad�, �e Karel stoj� na poli, na kter�m je polo�en� cihla.
P��klady
- Chci, aby Karel provedl krok, jen tehdy, je-li oto�en k severu.
JeSever { Krok }
- Chci, aby Karel provedl krok, jen kdy� nestoj� p�ed zd�.
JeZe� { } Jinak { Krok }
- Chci aby Karel vzal cihlu z pole jen tehdy, je-li na tomto poli n�jak� cihla, jinak chci aby se oto�il do leva, a provedl krok.
JeCihla { Zvedni } Jinak { Vlevobok Krok }
Cykly
Cykly stejn� jako podm�nky slou�� pro lep�� ��zen� robota. Pomoc� podm�nky lze opakovat ur�itou posloupnost p��kaz�, dokud bude (resp. nebude) spln�na ur�it� podm�nka. Syntaxe cyklu:
Dokud podm�nka { #Posloupnost povel�, jen� se maj� opakovan� vykonat, dokud podm�nka plat�. }
Nebo druh� mo�nost:
Dokud NE podm�nka { #Posloupnost povel�, jen� se maj� vykonat, dokud podm�nka neplat�. }
Podm�nky mohou b�t t�i, a jejich v�znam je j�� vysv�tlen v kapitole o v�tven�.
P��klady cykl�
- Chci, aby se Karel oto�il na sever, ani� bych v�d�l, kter�m sm�rem je oto�en.
Dokud NE JeSever { Vlevobok }
- Chci, aby Karel vybral ve sm�ru, ve kter�m je oto�en, �adu cihel, dokud nenaraz� na pole, na n�m� cihla nen�.
Dokud JeCihla { Zvedni Krok }
Pozn�mky
Do programu pro robota Karla lze vkl�dat pozn�mky, kter� nejsou ur�eny pro Karla, ale pro program�tora. Tyto pozn�mky Karel ignoruje, a slou�� jen pro zp�ehledn�n� programu. Pozn�mka za��n� symbolem "#", a pokra�uje a� do konce ��dku.
P��klad okomentovan�ho kousku programu:
Dokud NE JeZe� #P�jdu a� ke zdi. { Krok #Tohle je ten krok. # Nikdy se nestane: Polo� }
Procedury
Procedura je nov� povel, kter� se Karel nau��. Aby Karel mohl proceduru prov�st, mus� zn�t v�echny povely, ze kter�ch se skl�d�. K definov�n� nov� procedury slou�� kl��ov� slovo Procedure
. Za t�mto slovem n�sleduje textov� �et�zec, jen� ozna�uje n�zev nov�ho povelu.
Pro n�zev povelu plat�:
- Za��n� p�smenem, nebo ��slem
- Obsahuje p�smena, nebo ��slice
- N�zev nen� shodn� s ��dn�m kl��ov�m slovem
Nap��klad povolen� n�zvy jsou: "Krok3", "a", "Vpravobok", atd...
Nap��klad nepovolen� n�zvy jsou: "%er", "Krok", "Dvoj krok", atd...
Samotn� t�lo procedury (Posloupnost p��kaz�, jen� se maj� prov�st.) je uzav�eno ve slo�en�ch z�vork�ch.
P��klad procedury
Procedure pokus1 { #Schv�ln� vraz�m do zdi Dokud NE JeZe� { krok } krok # BUM!!!!!!!!! }
Upozorn�n�
Psan� pozn�mek mimo t�lo procedury (mimo z�vorky "{" , "}") nen� dovoleno.
Rekurzivn� vol�n�
Rekurzivn� vol�n� je vyvol�n� procedury (povelu) ze "sebe sama". Rekurze m��e b�t p��m�, �i nep��m�. Programovac� jazyk Karel podporuje pou��v�n� rekurze p��m�, i nep��m�.
P��klad p��m� rekurze
Procedure NaSever { JeSever {} Jinak { Vlevobok NaSever # Procedura vol� sama sebe } }
Dob�e si promyslete, �e skute�n� (A hlavn� pro�?) tato procedura dok�e obr�tit Karla k severu, a� je p�ed jej�m vyvol�n�m oto�en jakkoliv! Jinou metodu �e�en� probl�mu oto�en� na sever jsme nast�nili v kapitole o cyklech.
Dal��m druhem rekurze je rekurze nep��m�. Procedura op�t zavol� sama sebe, ale pou�ije k tomu jednu, nebo v�ce procedur.
P��klad nep��m� rekurze
Procedure r1 { krok r2 } Procedure r2 { JeZe� { } Jinak { r1 } }
P�ijdete sami na to, co ud�l� Karel, pokud mu zad�te vykonat povel r1?
�ast� chyby
V t�to kapitole pouk�eme na �ast� chyby, kter� mohou nastat i v�m p�i psan� program� pro robota Karla. Zde v�m nab�dneme n�kolik rad, jak p�edej�t chyb�m.
- Nepi�te pozn�mky mimo t�lo (Vn�j�� slo�en� z�vorky) procedury.
- Po�et z�vorek "{" v procedu�e mus� b�t stejn� jako po�et z�vorek "}".
- Nepo��vejte pro n�zev nov� procedury kl��ov� slova
- Nov� procedury je nejlep�� vytv��et pomoc� programu xKarel, a n� pomoc� jak�hokoliv jin�ho programu (Textov�ho editoru).
- Nezapome�te, �e v�e co nap��ete za symbol "#" a� do konce ��dku, je Karlem ignorov�no.
Vysv�tlen� n�kter�ch chybov�ch hl�ek
- Ne�ekan� ukon�en� zdrojov�ho textu procedury XXX
- V dan� procedu�e do�lo k ukon�en� t�la procedury, a�koliv syntaxe konec nedovoluje. Zkontrolujte nap��klad, jestli v�echny podm�nky, nebo cykly maj� spr�vn� z�vorky.
- XXX ve sv�m t�le n�kde postr�d� za��tek bloku (znak "{")
- Zkontroluje, jestli znak "{" je skute�n� v�ude, kde je o�ek�v�n. V cyklech, podm�nk�ch, za slovem "JINAK".
- XXX ve sv�m t�le n�kde postr�d� konec bloku (znak "}")
- Zkontroluje, jestli znak "}" je skute�n� v�ude, kde je o�ek�v�n. V cyklech, podm�nk�ch, za slovem "JINAK".
- �patn� pou�it� kl��ov�ho slova NE v procedu�e XXX
- Zkontrolujte, zda p�ed ka�d�m slovem "NE" v procedu�e XXX je skute�n slovo "DOKUD", a za slovem "NE" n�sleduje podm�nka.
- �patn� po�it� kl��ov�ho slova JINAK v procedu�e XXX
- Zkontrolujte, zda p�ed ka�d�m slovem "JINAK" v procedu�e XXX je podm�nka, a za slovem "NE" n�sleduje z�vorka "{".
- Za kl��ov�m slovem DOKUD (resp. DOKUD NE) je o�ek�v�na podm�nka v procedu�e XXX
- Zkontrolujte, zda za ka�d�m slovem dokud, (resp. Dokud NE) n�sleduje podm�nka.
- Jako n�zev procedury nelze pou��t kl��ov� slovo XXX
- Zm��te n�zev procedury. N�zev procedury nesm� b�t kl��ov� slovo XXX.
Chyby, jen� vzniknou b�hem vykon�v�n� n�jak� procedury
- Omlouv�m se, ale nem��u zde polo�it v�ce cihel.
- Karel pokl�d� cihlu na pole, na kter� ji� nelze polo�it v�ce cihel.
- Nemohu nic vz�t. Kde nic nen�, ani smrt nebere.
- Sna��te se zvednout cihlu z pole, na kter�m nic nen�.
- Au, to bol�, narazil jsem hlavou do zdi!
- Karel narazil hlavou do zdi. Tedy provedl povel "Krok" v moment�, kdy st�l p�ed zd�, a byl oto�en sm�rem ke zdi.
- Procedura XXX nem� t�lo.
- N�kde pou��v�te povel nazvan� XXX, kter� v�ak Karel nezn�.
Vtip dne: V�te co m� spole�n�ho jazyk Smalltalk s jazykem pro robota Karla? Oba pou��vaj� pro pozn�mky stejn� symbol.
- Autor WWW str�nek: Radim Dost�l
- Auto�i programu: Radim Dost�l & Petr Abrahamczik
- > Doporu�en� styl <
- > Styl pro tisk <
- > Bez stylu <