Kdo je Karel

Milý čtenáři. Tento robot se jmenuje Karel. Jméno Karel mu dal učitel programování – autor prvního programu a knížky „Karel The Robot“ – Richard E. Pattis ze Stanfordské univerzity. Své jméno získal na počest spisovatele Karla Čapka, autora divadelní hry RUR – Rossums Universal Robots.

U nás se objevil poprvé zásluhou docenta Hvoreckého, CSc. Robota Karla se ujala spousta lidí, mezi nimi i ing. Tomáš Bartovský, CSc., a ing. Rudolf Pecinovský, CSc., kteří zjednodušením „pravidel“ jazyka robota Karla více přiblížili dětem. Oproti americkému Karlovi přidali také rekurzi.

Pro Tebe a všechny české a moravskoslezské přátele ho v roce 1999 znovu oživil a v roce 2001 pro Internet připravil vysokoškolský student Oldřich Jedlička. Na webové stránky se dostal poprvé až v roce 2002 a nového zpracování se dočkal v roce 2006.

Co Karel umí

Karel je především robot. Jako každý správný robot i Karel plní něčí příkazy. Tou váženou osobou, která mu může dávat příkazy, jsi Ty.

Karel zná několik příkazů, kterými ho můžeš vést jeho městem.

KROK Udělá jeden krok vpřed. Jít mimo město, stejně jako lézt na zdi, se nedá. Karel Tě sám upozorní, že nemůže příkaz provést.
VLEVO-VBOK Otočí se o 90° proti směru hodinových ručiček. Otáčet se může stále, netočí se mu totiž hlava.
POLOŽ Karel vezme ze svého kouzelného batohu, který má na zádech, značku a položí ji. Do jednoho políčka se vejde osm značek.
ZVEDNI Zvedne značku a dá si ji zpátky do batohu.

Teď už víš, jakými příkazy můžeš vést Karla po městě. Při pohybu může ujít jeden krok, který je vždy stejně dlouhý, nebo se otočit přesně o 90° proti směru hodinových ručiček – vyjádřeno jako v zeměpise, může být otočen pouze na sever, západ, jih a východ. Tato dvě omezení, totiž že může učinit pouze celý krok, ne třeba půlku nebo jeden a půl kroku, a že se může otočit pouze do čtyř směrů, dovolují představit si Karlovo město jako šachovnici, jehož políčka jsou přesně tak dlouhá, jako je Karlův krok. Tuto představu mohou využít všichni, kteří nemají zrovna přístup k počítači – stačí si vzít šachovnici, jež bude představovat Karlovo město, a figurku koně, která bude představovat Karla.

Mimo tyto příkazy zná Karel ještě další. Některé mu umožňují se lépe rozhodnout, jestli má udělat krok, nebo vzít značku, a další mu řekne, že má příkaz opakovat několikrát.

KDYŽ podmínka
příkazy 1
KONEC, JINAK
příkazy 2
KONEC

Karel prozkoumá, jestli je podmínka splněna. Pokud zjistí, že ano, provede příkazy 1, a pokud ne, provede příkazy 2.

Uvedení slov KONEC, JINAK následovaných příkazy 2 není povinné a může být vynecháno. Ale pozor! Mezera mezi KONEC, JINAK musí být uvedena.

DOKUD podmínka
příkazy
KONEC

Karel zjistí, jestli je podmínka splněna a dokud bude platit, bude provádět příkazy.

OPAKUJ počet–KRÁT
příkazy
KONEC

Karel bude opakovat příkazy tolikrát, kolikrát má uvedeno v parametru počet.

Uvedení slova –KRÁT není povinné.

Novinka v zápisu cyklů DOKUD a OPAKUJ je možnost zápisu podmínky  podmínka na konci cyklu, která dokáže cyklus předčasně ukončit. Další novinkou je zápis cyklu OPAKUJ bez uvedení počtu opakování. Tyto novinky fungují jen v javascriptové verzi, windowsová verze Visual Karel je mít nebude.

Níže je uveden přehled možných zápisů. Přehled není úplný, autor zcela záměrně zatajil jednu variantu, protože Tě nechce mást blbostmi.

DOKUD podmínka 1
příkazy
 podmínka 2

Karel zjistí, jestli je podmínka 1 splněna. Pokud není, přeskočí se celý cyklus. Pokud je splněna, Karel provede příkazy a na konci vyhodnotí podmínku 2. Pokud je podmínka splněna, cyklus končí. Pokud není splněna, Karel se vrací na první řádku cyklu a celý postup opakuje.

Shrneme-li to, cyklus se opouští na začátku tehdy, když NENÍ splněna podmínka 1. Na konci se opouští tehdy, když JE splněna podmínka 2.

OPAKUJ počet-KRÁT
příkazy
 podmínka

Karel opakuje příkazy stejně, jako je uvedeno výše u cyklu OPAKUJ. Navíc Karel po každém provedení příkazů vyhodnotí podmínku a, je-li splněna, ukončí opakování.

Opakování příkazů Karel provede nejvíce počet–krát, a pokud je počet větší než 0, příkazy se provedou alespoň jednou.

OPAKUJ
příkazy
 podmínka

Tento zápis je podobný cyklu DOKUD. Karel nejprve jednou vykoná příkazy a opakuje je po dobu, kdy není splněna podmínka.

Cyklus končí, když JE podmínka splněna. Příkazy se provedou vždy alespoň jednou.

Slovo příkazy označuje libovolný sled příkazů, které Karel zná. Při učení Karla novému příkazu můžeš mezi příkazy zapsat i tento nový příkaz. Takovému zápisu se říká rekurze. Příklad použití uvidíš v odstavci Zápis nových příkazů.

Podmínka je jedno slovo, případně spojení dvou slov. Může to být spojení slova JE, které je nepovinné, nebo NENÍ, a jednoho dalšího slova:

ZEĎ
Jestli JE / NENÍ před Karlem postavena zeď, pak je podmínka splněna.
ZNAČKA
Jestli JE / NENÍ na políčku ve městě, kde Karel právě stojí, umístěna značka, pak je podmínka splněna.
DOMOV
Jestli JE / NENÍ políčko, na kterém Karel stojí, označeno písmenem D (DOMOV), Karel se nachází či nenachází doma a podmínka je splněna.
VÝCHOD
Jestli JE / NENÍ Karel natočen na východ, je podmínka splněna.
SEVER
Jestli JE / NENÍ Karel natočen na sever, je podmínka splněna.
ZÁPAD
Jestli JE / NENÍ Karel natočen na západ, je podmínka splněna.
JIH
Jestli JE / NENÍ Karel natočen na jih, je podmínka splněna.

Protože Karel někdy udělá pauzu při vykonání příkazů (podrobnosti najdeš v odstavci Rychlost pohybu), můžeš mu říci, aby žádnou prodlevu nedělal a příkazy provedl co nejrychleji. K tomu slouží následující zápis:

RYCHLE
příkazy
POMALU

Karel provede bez prodlení všechny příkazy tak rychle, jak jen dovede. Pokusí se neudělat žádnou viditelnou pauzu a profrčí jak rychlík.

RYCHLE
příkazy
KONEC

Jiný zápis stejného úkolu. Liší se pouze ve slově KONEC na konci.

Posledním příkazem, který Karel umí, je:

STOP Karel zastaví svou činnost a uvede se do stavu, ve kterém znovu přijímá nové příkazy.
Na začátek

Zápis nových příkazů

Na několika jednoduchých příkladech Tě seznámím s použitím základních příkazů a jejich skládáním. Protože cest k cíli vede vždy více, ani možnost zápisu jednoho příkazu není jediná. Následující ukázky si ale nekladou za cíl být úplným výčtem všech možností zápisu.

ČELEM-VZAD
VLEVO-VBOK
VLEVO-VBOK
KONEC
ČELEM-VZAD
OPAKUJ 2-KRÁT
VLEVO-VBOK
KONEC
KONEC
VPRAVO-VBOK
VLEVO-VBOK
VLEVO-VBOK
VLEVO-VBOK
KONEC
VPRAVO-VBOK
OPAKUJ 3-KRÁT
VLEVO-VBOK
KONEC
KONEC
VPRAVO-VBOK
ČELEM-VZAD
VLEVO-VBOK
KONEC
VPRAVO-VBOK
VLEVO-VBOK
ČELEM-VZAD
KONEC

Karel při vykonávání uživatelských příkazů bere příkaz za příkazem. Pokud při činnosti narazí na uživatelský příkaz, zapamatuje si, který příkaz následoval, a začne ten uživatelský příkaz vykonávat.

A nyní několik příkladů s podmínkami. Vyskytuje se v nich slovo rekurze. Je to mocný nástroj, který Ti mnohokrát pomůže a usnadní řešení nejednoho problému. Na následujícím příkladu jistě vidíš, že příkaz KE ZDI je použit sám v sobě. A právě použití příkazu, který se Karel zrovna učí, v těle tohoto příkazu, se označuje honosným slovem rekurze. Při psaní vlastních programů s rekurzí si dej pozor, abys vždy měl podmínku, která cyklus volání sebe sama ukončí. V tomto případě to je podmínka KDYŽ NENÍ ZEĎ, která se jednou musí stát nepravdivou (Karel, pokud pokaždé udělá krok, musí ke zdi dojít). V posledním příkladě příkazu KE ZDI je situace stejná – zamysli se nad ním.

bez rekurze

s rekurzí

KE ZDI
DOKUD NENÍ ZEĎ
KROK
KONEC
KONEC
KE ZDI
KDYŽ NENÍ ZEĎ
KROK
KE ZDI
KONEC
KONEC
KE ZDI
KDYŽ NENÍ ZEĎ
KROK
KE ZDI
KONEC, JINAK
KONEC
KONEC
KE ZDI
KDYŽ JE ZEĎ
KONEC, JINAK
KROK
KE ZDI
KONEC
KONEC
Na začátek

Psaní komentářů

Psaní komentářů v příkazech je dovoleno a od verze 2.0 webového robota Karla jsou ukládány společně s příkazy. Stejně tak jsou zachovávány prázdné řádky, avšak pokud vynecháš více prázdných řádek, bude uložen pouze jeden.

příkaz ; komentář
; komentář
Veškerý text za středníkem (;) je považován za komentář. Pokud se nachází komentář za příkazem, je při ukládání umístěn na samostatnou řádku.
Na začátek

Vývojové prostředí

Vývojové prostředí robota Karla se skládá z těchto čtyř částí:

Na začátek

Město

Město robota Karla je vlastně šachovnice 10 × 10 polí. Mimo město Karel nemůže jít, je sám ve svém světě a Ty mu děláš společnost. Jedno políčko ve městě je nadepsáno písmenem D a označuje Karlův domov. Do města můžeš přistavovat zdi. Protože je Karel jenom jednoduchý robot, neumí lézt na zdi, a proto je pro něj zeď nepřekonatelnou překážkou.

Pod městem je řádka nástrojů, s jejichž pomocí můžeš Karlovi město přikrášlit. Následující přehled Ti řekne, co všechno lze ve městě udělat po tom, co si klepnutím myši zvolíš určitý nástroj.
Karel
Jedním klepnutím myši ve městě Karla přemístíš na jiné políčko. Samozřejmě, že ho nelze donutit lézt na zdi, to Karel neumí. Dvojitým klepnutím myši můžeš Karla otočit doleva. Je to stejný případ, jako by měl učinit VLEVO-VBOK.
Domov
Jedním klepnutím myši můžeš přemístit políčko, které bude Karlovým domovem.
Zeď

S pomocí tohoto nástroje můžeš me městě stavět zdi. Pokud je na políčku nějaká značka, Karel si ji nejprve uschová do svého batohu.

Políčko, které je Karlovým domovem, nelze zastavět zdí. Kde by potom Karel bydlel! Stejně tak nelze postavit zeď na stejné políčko, kde stojí Karel. Tím bys ho postavil na zeď, ze které by neuměl slézt.

Polož
Položí na políčko značku.
Zvedni
Zvedne značku z políčka.
Vyčisti město
Vyčistí celé město od všech zdí a značek. Karel se postaví do levého dolního rohu, jak je vždy na začátku práce zvyklý.
Posbírej vše
Vyčistí celé město od všech značek.
Na začátek

Slovník a příkazové pole

Všechny příkazy, které Karel umí vykonat, jsou uloženy v jeho slovníku. Jistě jsi si všiml, že v něm nejsou zobrazeny všechny. Ukázány jsou pouze ty, které může Karel provést okamžitě, takže můžeš ve městě pozorovat nějakou změnu. Jak budeš Karla učit novým příkazům, tak se bude i jeho slovník rozšiřovat. Klepnutím na tlačítko vedle příkazu řekneš Karlovi, že bys byl rád, aby příkaz vykonal. Tlačítko může změnit svůj vzhled; jak a co to znamená, Ti hned povím.

Spustit
Karel začne vykonávat příkaz uvedený vedle tlačítka. Až ho naučíš nové příkazy, může se během delšího provádění změnit na následující tlačítko.
Zastavit
Při vykonávání delšího příkazu můžeš vykonávání zastavit. Karel se přeci může dostat do bezvýchodné smyčky a bude se například točit stále dokola. Karel je ale robot, tak mu to nevadí. Bude se stále točit a jediné východisko z této situace je stisknout tlačítko pro zastavení. A to můžeš udělat jedině Ty.

Pod slovníkem je řada tlačítek a pod tlačítky je místo, kde lze měnit příkazy a zadávat nové. Je tam název měněného příkazu a velký obdélník, do kterého můžeš psát příkazy – proto mu dále budeme říkat příkazové pole. Do příkazového pole můžeš zapisovat nové příkazy ve stejné formě, jak byly ukázány v odstavci Zápis nových příkazů. Tvé příkazy sice nebudou plné barev, ale nezoufej, Karel jim i tak porozumí.

Řada tlačítek umístěná těsně pod slovníkem.
Řada tlačítek umístěná nad polem příkazů.
Nový
Připraví příkazové pole na příjem nového příkazu. Jméno příkazu je NOVÝ PŘÍKAZ. Pokud již Karel takový příkaz zná, je za název příkazu přidána pořadová číslice 2, 3, 4 atd.
Ukaž
Nejprve vyber ve slovníku příkaz, který chceš zobrazit. Potom klepni na toto tlačítko a příkaz se Ti v příkazovém poli celý zobrazí. Nyní můžeš změnit jeho jméno, opravit chybný sled příkazů, přidat další příkazy, prostě měnit, co se Ti zlíbí.
Ulož
Uloží příkaz z příkazového pole do Karlovy paměti. Tím se Karel příkaz naučí. Jestliže jsi nejprve zobrazil nějaký jiný příkaz a pak ho upravoval, je v Karlově paměti přepsán a je mu dán nový název.
Ulož nově
Uloží příkaz z příkazového pole do Karlovy paměti. Poznáš, že je to dobrý nástroj v případě, že jsi předtím zobrazil nějaký jiný příkaz, upravil jsi ho, a nyní ho chceš uložit pod jiným jménem, ale starý příkaz, původně zobrazený, chceš zachovat.
Smaž
Smaže vybraný příkaz z Karlovy paměti. Karel příkaz zapomene.
Reset
Reset paměti. Vymaže všechny příkazy z Karlovy paměti.

Důležité poznámky ke slovníku a k příkazům

Na začátek

Nahrávání a ukládání

Po těžké práci a učení robota Karla si jistě budeš chtít uchovat výsledek své práce. I tato možnost je ve vývojovém prostředí zahrnuta. Ukládání je pro město a slovník oddělené, nahrávání (načítání) je společné.

Řada tlačítek pro ukládání pod městem.
Řada tlačítek umístěná nad slovníkem.
Uložit

Nabídne nové okno, ve kterém se zobrazí text, který si někam uschovej. Jedná se o jednu dlouhou řádku textu (můžeš ji vidět rozdělenou na několik řádek) začínající slovem Karel a končící slovem KONEC. Nedoporučuji Ti text ručně opisovat, je to zdlouhavé. Nejsnadnější způsob, jak zachovat svou práci, je v systému Windows tento (používá se tzv. schránka):

  • zobrazený text označ myší, potom klepni pravým tlačítkem myši a ze zobrazené nabídky vyber volbu „Kopírovat“ (tím se označený text zkopíruje do schránky);
  • spusť nějaký program, který neprovádí další formátování textu (proto ne Word). Je to bezpečnější. Vhodný je například Poznámkový blok (Notepad);
  • v oblasti psaní textu klepni pravým tlačítkem myši a ze zobrazené nabídky zvol „Vložit“ (tím se vloží obsah schránky);
  • nyní můžeš uložit soubor pod nějakým vhodným jménem, abys nezapoměl, co je v něm uloženo důležitého.
Exportovat do
verze 1.2

V novém okně se, stejně jako v případě stisku tlačítka „Uložit“, zobrazí jedna dlouhá řádka začínající slovem Karel a končící slovem KONEC. Postup uchování se vůbec nemění.

Rozdíl oproti běžnému uložení je v tom, že se nyní ukládá do formátu vhodného pro starší webovou verzi Karla - verzi 1.2. Protože ale tehdy Karel zapomínal úplně všechny komentáře, nebudou raději žádné komentáře uloženy.

Exportovat do
formátu K99

V novém okně se zobrazí text, který si můžeš uschovat. Postup je naprosto stejný, jako u tlačítka „Uložit“. Text je určen pro program Visual Karel 99, který ho umí přečíst. Jako příponu ukládaného souboru je vhodné použít K99, protože tu program sám používá.

Načíst

Stejně jako u ukládání je postup obnovy znalostí Karla nebo stavby města nepříliš složitou záležitostí. Po stisknutí tlačítka vidíš, že po Tobě Karel žádá vložení „jediné dlouhé řádky“, kterou jsi předtím obdržel při ukládání. Pokud jsi použil výše uvedený postup, pak je způsob obnovy informací následující (opět používáme tzv. schránku):

  • spusť program, ve kterém jsi předtím text uložil. Jednalo se o program Poznámkový blok (Notepad) nebo jemu podobný. Otevři soubor, ve kterém máš text uložen;
  • označ myší všechen text od počátečních znaků Karel až po poslední slovo KONEC, stiskni pravé tlačítko myši a z nabídky vyber „Kopírovat“ (tím se označený text zkopíruje do schránky);
  • vrať se zpátky do okna, ve kterém Tě Karel žádá o vložení textové řádky. Pravým tlačítkem myši klepni na řádku, do které lze psát text, a z nabídky zvol „Vložit“ (tím se vloží obsah schránky).
  • potvrď vložení textu tlačítkem Ok. Budeš vyzván o potvrzení svého záměru. Uvidíš, že Karel ví, jestli chceš nahrát obsah slovníku nebo města.

Důležité poznámky ukládání a načítání

Na začátek

Rychlost pohybu

Pod městem robota Karla je umístěn prvek pro změnu rychlosti pohybu Karla.

Pomalu
Rychle
Středně rychle
Nastavení rychlosti provádění příkazů.

Nyní potřebuješ vědět, jak robot Karel vykonává příkazy, které jsi ho naučil. Karel vezme jeden příkaz a vyhodnotí ho. Pokud narazil na příkaz, který po něm nechce žádnou práci, pak vezme další příkaz a úplně stejně ho prozkoumá. Takto pokračuje, dokud nenarazí na nějaký pracovní příkaz – KROK, VLEVO-VBOK, POLOŽ nebo ZVEDNI.

Protože by Karel chtěl okamžitě po provedení akce zkoumat další příkaz, máš možnost mu dát chvilku oddech. Ten řídíš nastavením velikosti prodlevy mezi vykonáváním příkazů na stupnici – malá prodleva napravo, velká prodleva vlevo. Tím se také určí Karlova rychlost – malá prodleva znamená velkou rychlost a velká prodleva zase malou.

Při některých příkazech se Karel mnohokrát rozhoduje a nenaráží na žadný pracovní příkaz. To může způsobit pomalejší odezvy Tvého internetového prohlížeče. Pro zamezení zablokování je rozhodování časově omezeno na 25 ms – po vypršení časového limitu je kontrola předána prohlížeči.