�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

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

  1. Chci, aby Karel provedl krok, jen tehdy, je-li oto�en k severu.
    JeSever
    {
         Krok
    }
  2. Chci, aby Karel provedl krok, jen kdy� nestoj� p�ed zd�.
    JeZe�
    { }
    Jinak
    {
        Krok
    }
  3. 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�

  1. Chci, aby se Karel oto�il na sever, ani� bych v�d�l, kter�m sm�rem je oto�en.
    Dokud NE JeSever
    {
        Vlevobok
    }
  2. 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.