PC-Karel (2001/07/12). Internet: www.pckarel.zde.cz (
[email protected]) Copyright: 1996–2001 Jirˇ´ı Osoba (
[email protected]). All Rights Reserved. Za pomoc, na´pady a mysˇlenky deˇkuji zvla´sˇteˇ Davidu Breberovi a Petru Pelantovi. Sazba syste´mem TEX.
PC–Karel Va´zˇeny´ cˇtena´rˇi, dosta´va´ se Va´m do tuky text, ktery´ si klade dva cı´le: sezna´mit Va´s se za´klady jazyka Karel a popsat jeho implementaci pro osobnı´ pocˇ´ıtacˇe IBM-PC s na´zvem PC-Karel. Prvnı´ cˇa´st je obecna´ a meˇla by, s ru˚zny´mi maly´mi u´pravami, platit na vsˇech implementacı´ch. Konkre´tnı´mi vlastnostmi programu PC-Karel se zaby´va´ druha´ cˇa´st. Prˇi studiu doporucˇuji vsˇe rovnou zkousˇet u kla´vesnice pocˇ´ıtacˇe – je to nejlepsˇ´ı metoda. Prˇina´sˇ´ı ale jednu nevy´hodu: Prˇi postupne´m studiu prvnı´ cˇa´sti bude trˇeba obcˇas nahlı´zˇet do cˇa´sti druhe´. To proto, zˇe Karel ma´ 2 cˇa´sti: svoji „dusˇi“ – samotny´ jazyk se svy´mi mysˇlenkami a konstrukcemi, a svoje „teˇlo“ – vlastnı´ implementaci pro pocˇ´ıtacˇ. Protozˇe jsem se v textu snazˇil oddeˇlit „dusˇi“ od „teˇla“, ale protozˇe jedno bez druhe´ho nemu˚zˇe existovat, je trˇeba onoho listova´nı´. Ti, kterˇ´ı jizˇ jazyk znajı´, mohou prostudovat pouze druhou cˇa´st ty´kajı´cı´ se programu PC-Karel. ´ RUKY; jde o volne´ programove´ vybavenı´ jehozˇ sˇ´ırˇenı´ Tento program je ABSOLUTNEˇ BEZ ZA je za jisty´ch podmı´nek vı´ta´no. Podrobnosti najdete v cˇa´sti Licencˇnı´ ujedna´nı´. Budu Va´m vdeˇcˇny´ za jake´koliv prˇipomı´nky at’uzˇ k programu, nebo k textu samotne´mu. Jirˇ´ı Osoba.
1. KAREL – popis jazyka 1.1. Trocha historie nikoho nezabije Jazyk Karel vytvorˇil profesor Richard E. Pettis ze Stanfordske´ univerzity v USA. Popsal jej ve sve´ knize „KAREL – The Robot“ a nazval jej skutecˇneˇ „KAREL“ – na pocˇest cˇeske´ho spisovatele Karla Cˇapka – autora divadelnı´ hry „R.U.R.“, ve ktere´ Cˇapek jako prvnı´ cˇloveˇk na sveˇteˇ pouzˇil slova robot (ktere´ ale vymyslel jeho bratr Josef). V by´vale´m Cˇeskoslovensku se Karel poprve´ objevil za´sluhou doc. Hvorecke´ho v Bratislaveˇ. V druhe´ polovineˇ 80. let se Karel rozsˇ´ırˇil na vsˇechny tehdy pouzˇ´ıvane´ mikropocˇ´ıtacˇe (IQ151, PMD85, Sinclair, . . .) a konaly se souteˇzˇe deˇtı´ a mla´dezˇe v jeho programova´nı´. Karel byl pu˚vodneˇ navrzˇen jako „prˇedvoj“ jazyka Pascal – ma´ stejne´ programa´torske´ konstrukce a stejne´ principy – stejneˇ, jako Pascal podporuje strukturovane´ programova´nı´ a platı´ zde za´sada rozkladu proble´mu na jednodusˇsˇ´ı cˇa´sti. Nenı´ proto pro deˇti i dospeˇle´ proble´mem prˇejı´t od Karla naprˇ. k Logu, Pascalu, C a jiny´m programovacı´m jazyku˚m. Karel se obvykle vyucˇuje u deˇtı´ 10–13 let stary´ch – za´klady jsou i pro mladsˇ´ı, ale nejkra´sneˇjsˇ´ı cˇa´st – rekurze – je na´rocˇna´ i pro neˇktere´ dospeˇle´. Jesˇteˇ malou pozna´mku k pouzˇ´ıvane´ CESTINE: Ta vznikla v dobeˇ, kdy pocˇ´ıtacˇe jesˇteˇ neumeˇly CˇESKY a od te´ doby se v Karlovi zachova´va´.
1.2. Za´kladnı´ kameny Karla Karel je maly´, ale sˇikovny´, robotek, ktery´ zˇije ve sve´m meˇsteˇ – cˇtvercove´m nebo obde´lnı´kove´m dvorecˇku, po ktere´m se mu˚zˇe pohybovat. Mu˚zˇe by´t natocˇen do jedne´ ze 4 sveˇtovy´ch stran (SEVER, JIH, VYCHOD, ZAPAD) a na za´dech nosı´ kouzelny´ bat’u˚zˇek, ze ktere´ho mu˚zˇe vytahovat znacˇky a kla´st je na mı´sto, na ktere´m pra´veˇ stojı´, a opeˇt je sbı´rat. Bat’u˚zˇek se podoba´ bezedne´ sla´nce – je v neˇm dostatecˇna´ za´soba znacˇek pro cele´ meˇsto. Za´kladnı´ a nejdu˚lezˇiteˇjsˇ´ı Karlovou vlastnostı´ je schopnost ucˇit se nove´ prˇ´ıkazy. Tyto slozˇene´ prˇ´ıkazy se Karel ucˇ´ı jako sled prˇ´ıkazu˚ jizˇ zna´my´ch. A aby bylo pro zacˇa´tek z cˇeho sestavovat, zna´ Karel neˇkolik za´kladnı´ch prˇ´ıkazu˚ – primitiv: • SLOVNIK – Karel vypı´sˇe vsˇechny zna´me´ prˇ´ıkazy – primitiva i slozˇene´ prˇ´ıkazy. • MESTO – spousˇtı´ jaky´si editor meˇsta, ktery´m mu˚zˇeme do meˇsta postavit zdi, polozˇit znacˇky apod. • ROZKLAD – Karel na´m uka´zˇe, z cˇeho a jak je slozˇen prˇ´ıkaz. • CHYBA – Karel vymazˇe ze sve´ho slovnı´ku poslednı´ prˇ´ıkaz. Pokud Karla zrovna ucˇ´ıme prˇ´ıkazu nove´mu, pak vymazˇe posledneˇ zadanou sekvenci. • KDYZ, DOKUD, OPAKUJ, KONEC – strukturovane´ prˇ´ıkazy. Jejich funkci si vysveˇtlı´me pozdeˇji. • KROK – prvnı´ ze 4 tzv. vy´konny´ch primitiv – Karel udeˇla´ jeden krok ve smeˇru, do ktere´ho je natocˇen. Pokud je prˇed nı´m zed’, pak Karel do te´to zdi narazı´, ohla´sı´ to a ukoncˇ´ı vykona´va´nı´ vsˇech prˇ´ıkazu˚. • VLEVO-VBOK – Karel se otocˇ´ı o 90° proti smeˇru hodinovy´ch rucˇicˇek. • POLOZ – Karel vynda´ ze sve´ho kouzelne´ho bat’u˚zˇku znacˇku a polozˇ´ı ji na polı´cˇko, na ktere´m stojı´, ovsˇem pouze tehdy, pokud tam je jesˇteˇ mı´sto. Na kazˇde´ polı´cˇko se vejde jenom neˇkolik znacˇek (5, 9, . . . – podle implementace). Vı´c jich tam da´t nejde – komı´n znacˇek by spadl – Karel to ohla´sı´ a skoncˇ´ı.
Obr. 1: Karel ve sve´m meˇsteˇ
• ZVEDNI – Karel zvedne znacˇku z polı´cˇka, na ktere´m stojı´, a ulozˇ´ı ji do sve´ho bat’u˚zˇku. Pokud tam zˇa´dna´ znacˇka nenı´, Karel se trochu nazlobı´, protozˇe prˇece „Kde nic nenı´, ani smrt nebere“ a skoncˇ´ı (jako kdyzˇ narazı´ do zdi . . .). To jsou tedy za´kladnı´ prˇ´ıkazy, ktere´ Karel zna´ od zacˇa´tku. Neˇktere´ z nich si mu˚zˇete rovnou vyzkousˇet (SLOVNIK, MESTO, KROK, POLOZ, ZVEDNI) i s tı´m, jak se bude Karel chovat, pokud ho budete nutit deˇlat veˇci, ktere´ nemu˚zˇe (KROK do zdi apod.). Prˇ´ıkazy SLOVNIK, MESTO, ROZKLAD a CHYBA nejdou pouzˇ´ıt prˇi sestavova´nı´ novy´ch prˇ´ıkazu˚.
1.3. Slozˇene´ prˇ´ıkazy Jisteˇ sami uzna´te, zˇe by to nebylo nic moc, kdybychom mohli s Karlem jen rucˇneˇ chodit po dvorecˇku. To je pravda. Ale jak jsem se jizˇ zmı´nil drˇ´ıve, je Karel ochoten se ucˇit novy´m prˇ´ıkazu˚m. A to nenı´ ma´lo. Jak na to? Jednodusˇe. Dejme tomu, zˇe chceme Karla naucˇit nove´mu obratu, CELEM-VZAD. Co vlastneˇ musı´ Karel udeˇlat? Po prˇ´ıkazu CELEM-VZAD musı´ zu˚stat otocˇen na druhou stranu. Cozˇ znamena´, zˇe musı´ udeˇlat 2× VLEVO-VBOK. Vy´borneˇ, proble´m s CELEM-VZAD ma´me teoreticky vyrˇesˇen. Nynı´ se pokusı´me tomu naucˇit Karla. Pokud zada´me Karlovi prˇ´ıkaz, ktery´ jesˇteˇ nezna´, protozˇe ho nema´ ve sve´m slovnı´ku, pak si myslı´, zˇe ho chceme neˇcˇemu nove´mu naucˇit. Proto, pokud zada´me CELEM-VZAD ↵, se zaraduje a odpovı´ na´m: NOVY PRIKAZ CELEM-VZAD ZNAMENA ´ ME´ prˇ´ıkazy. Proto mu budeme odpovı´dat na´sledovneˇ: a cˇeka´, zˇe mu budeme zada´vat jizˇ ZNA VLEVO-VBOK ↵ VLEVO-VBOK ↵ KONEC ↵ Nynı´ se mu˚zˇeme prˇesveˇdcˇit, zˇe to opravdu zabralo. Po prˇ´ıkazu SLOVNIK vidı´me, zˇe Karel zna´ i na´sˇ novy´ prˇ´ıkaz CELEM-VZAD. Po prˇ´ıkazu ROZKLAD a CELEM-VZAD vidı´me, zˇe: CELEM-VZAD ZNAMENA VELVO-VBOK VLEVO-VBOK KONEC Na´sˇ novy´ prˇ´ıkaz mu˚zˇeme (a meˇli bychom) hned vyzkousˇet. Zada´me CELEM-VZAD ↵ a – O´, prˇeslavny´ to den – Karel provede dva VLEVO-VBOKy a zu˚stane sta´t cˇelem na druhou stranu. Na tomto mı´steˇ je myslı´m vhodne´ upozornit na jednu Karlovu vlastnost: obvykle nenı´ mozˇne´ opravovat prˇ´ıkazy. Proto doporucˇuji nejprve pecˇliveˇ pracovat na papı´rˇe a pote´ teprve prˇepisovat do pocˇ´ıtacˇe. Dalsˇ´ı za´ludnostı´ je to, zˇe je mozˇno (pomocı´ prˇ´ıkazu CHYBA) ze slovnı´ku mazat prˇ´ıkazy od konce – proto pecˇliveˇ kazˇdy´ novy´ prˇ´ıkaz vyzkousˇejte, nezˇ zacˇnete definovat dalsˇ´ı. Vyhnete se tı´m maza´nı´ a opeˇtne´mu definova´nı´ vı´ce prˇ´ıkazu˚ v okamzˇiku, kdy zjistı´te, zˇe trˇetı´ prˇ´ıkaz od konce slovnı´ku je chybny´.
1.4. Kopenogramy Pro za´pis slozˇeny´ch prˇ´ıkazu˚ mu˚zˇeme pouzˇ´ıvat prˇehledneˇjsˇ´ı, grafickou formu, tzv. KOPENOGRAM. Na´zev kopenogramu je odvozen od jmen jeho autoru˚: Kofra´nek–Pecinovsky´–Nova´k. Jak takovy´ kopenogram vypada´? Ukazˇme si to na prˇ´ıkladu CELEM-VZAD: CELEM-VZAD VLEVO-VBOK VLEVO-VBOK Kazˇdy´ prˇ´ıkaz se neˇjak jmenuje – CELEM-VZAD – na´zev je oddeˇlen od teˇla prˇ´ıkazu dvojitou cˇa´rou. A protozˇe je na´zev du˚lezˇity´, je vybarven zˇluteˇ . Na´sleduje teˇlo prˇ´ıkazu – blok slozˇeny´ z dalsˇ´ıch prˇ´ıkazu˚. Jednotlive´ prˇ´ıkazy majı´ cˇervenou (jedna´-li se o primitiva) nebo ru˚zˇovou (jedna´-li se o slozˇene´ prˇ´ıkazy) barvu. Blok koncˇ´ı vodorovnou cˇa´rou – ve slovnı´m za´pise to znamena´ KONEC. Uvidı´te, zˇe kopenogram je mnohem prˇehledneˇjsˇ´ı zpu˚sob za´pisu prˇedevsˇ´ım slozˇiteˇjsˇ´ıch prˇ´ıkazu˚. Nynı´ naucˇ´ıme Karla dalsˇ´ımu obratu na mı´steˇ – VPRAVO-VBOK. Jak uzˇ jisteˇ sami tusˇ´ıte, bude se skla´dat ze 3 prˇ´ıkazu˚ VLEVO-VBOK. Mozˇna´ rˇesˇenı´ jsou ale trˇi: VPRAVO-VBOK VLEVO-VBOK VLEVO-VBOK VLEVO-VBOK
VPRAVO-VBOK CELEM-VZAD VLEVO-VBOK
VPRAVO-VBOK VLEVO-VBOK CELEM-VZAD
protozˇe Karel uzˇ zna´ prˇ´ıkaz CELEM-VZAD. Za´pis pro Karla jisteˇ zvla´dnete sami. Po provedenı´ prˇ´ıkazu VPRAVO-VBOK by se Karel meˇl otocˇit o 90° po smeˇru hodinovy´ch rucˇicˇek.
1.5. Cyklus OPAKUJ Prˇedstavte si, zˇe je trˇeba neˇjakou cˇa´st programu zopakovat. Naprˇ´ıklad v prˇ´ıkaze VYPLN, ktery´m Karel vyplnı´ polı´cˇko, na ktere´m stojı´, znacˇkami, t.j. polozˇ´ı tam 9 (nebo 5 aj. – podle implementace) znacˇek. Mohli bychom to vyrˇesˇit podobny´m zpu˚sobem, jako prˇi definici prˇ´ıkazu VPRAVO-VBOK ze trˇ´ı prˇ´ıkazu˚ VLEVO-VBOK, t.j. mohli bychom napsat 9× za sebou prˇ´ıkaz POLOZ. Ale jisteˇ sami cı´tı´te, zˇe by to bylo prˇ´ılisˇ dlouhe´ a neprˇehledne´. Proto Karel umı´ zopakovat blok prˇ´ıkazu˚ (nebo i jeden samotny´) pomocı´ prˇ´ıkazu OPAKUJ: VYPLN 9 KRAT POLOZ ↑
VYPLN ZNAMENA OPAKUJ 9 KRAT POLOZ KONEC KONEC
A jak Karla naucˇit cyklu OPAKUJ? Snadno. Zada´me OPAKUJ ↵ a na ota´zku KOLIKRAT? odpovı´me 9 ↵. Vsˇimneˇte si, zˇe prˇ´ıkaz OPAKUJ na´m prˇida´ dalsˇ´ı prˇ´ıkaz KONEC. To proto, zˇe je trˇeba neˇjak oznacˇit blok prˇ´ıkazu˚, ktere´ se majı´ opakovat – jsou ohranicˇeny prˇ´ıkazy OPAKUJ — KONEC.
Da´le vidı´me, zˇe teˇlo cyklu (a vlastneˇ i teˇlo cele´ho prˇ´ıkazu) je posunuto trochu doprava – to proto, aby bylo sna´ze viditelne´, co je uvnitrˇ cˇeho a k cˇemu patrˇ´ı ktery´ KONEC. Toto posouva´nı´ si Karel vytva´rˇ´ı sa´m. Cykly je samozrˇejmeˇ mozˇne´ vkla´dat do sebe – cyklus mu˚zˇe obsahovat libovolnou sekvenci prˇ´ıkazu˚, tedy i dalsˇ´ı cyklus, podmı´nky atd. Hornı´ i dolnı´ cˇa´st kopenogramu pro opakova´nı´ ma´ zelenou barvu.
1.6. Cyklus DOKUD JE Dejme tomu, zˇe chceme Karla naucˇit prˇ´ıkaz VYBER, ktery´m vybere vsˇechny znacˇky, ktere´ jsou na polı´cˇku, na ktere´m stojı´. Slovneˇ bychom to vyja´drˇili asi tak, zˇe bude prova´deˇt prˇ´ıkaz ZVEDNI dokud pod nı´m bude neˇjaka´ znacˇka. Pro tyto prˇ´ıpady je Karel vybaven prˇ´ıkazem DOKUD a cely´ prˇ´ıkaz VYBER bude vypadat takto: VYBER ZNACKA ZVEDNI ↑
VYBER ZNAMENA DOKUD JE ZNACKA ZVEDNI KONEC KONEC
A jak naucˇit Karla cyklu DOKUD? Velmi podobneˇ, jako cyklu OPAKUJ. Zada´me: DOKUD ↵ a Karel se zepta´: DOKUD JE/NENI – to proto, zˇe prˇ´ıkazy uvnitrˇ DOKUD mu˚zˇe vykona´vat bud’ dokud podmı´nka JE splneˇna, nebo dokud splneˇna NENI. (Vyuzˇitı´ konstrukce DOKUD NENI si uka´zˇeme za pa´r rˇa´dku˚. Po volbeˇ JE/NENI jsme dota´za´ni na podmı´nku. Zada´me ZNACKA ↵. A jake´ podmı´nky umı´ Karel testovat? • ZNACKA – test, je-li na polı´cˇku, na ktere´m stojı´, neˇjaka´ znacˇka (jedna nebo vı´ce) – mu˚zˇe-li tedy bez obav prove´st prˇ´ıkaz ZVEDNI. • ZED – test, je-li na prˇ´ısˇtı´m polı´cˇku prˇed Karlem, t.j. ve smeˇru, ve ktere´m je natocˇen, zed’. Jiny´mi slovy – jestli Karel prˇ´ısˇtı´m krokem narazı´ do zdi. • SEVER, JIH, VYCHOD, ZAPAD – test, je-li Karel natocˇen do dane´ho smeˇru. Pro cyklus DOKUD platı´ to same´, co pro cyklus OPAKUJ: kopenogram je zeleny´, cykly se mohou vnorˇovat atd. To proto, zˇe oba prˇ´ıkazy jsou stejne´ho druhu – opakujı´ neˇjaky´ blok prˇ´ıkazu˚. Rozdı´l je pouze v tom, zˇe v OPAKUJ zna´me pocˇet opakova´nı´, kdezˇto u DOKUD je opakova´nı´ cyklu za´visle´ na (ne)splneˇnı´ vneˇjsˇ´ı podmı´nky. Je tu ale jesˇteˇ jeden maly´ rozdı´l: cyklus OPAKUJ probeˇhne pra´veˇ tolikra´t, kolikra´t ma´ napsa´no v za´hlavı´ (pokud nedojde k chybeˇ), zatı´mco cyklus DOKUD nemusı´ probeˇhnout ani jednou – pokud nenı´ podmı´nka splneˇna hned na zacˇa´tku, pak se blok prˇ´ıkazu˚ DOKUD — KONEC prˇeskocˇ´ı. Zada´te-li takto naucˇeny´ prˇ´ıkaz VYBER na mı´steˇ, na ktere´m nenı´ zˇa´dna´ znacˇka, tak Karel nic neudeˇla´. To je v porˇa´dku, protozˇe jsme rˇ´ıkali: dokud je neˇjaka´ znacˇka ke zvednutı´, tak ji zvedni. Nu a protozˇe tam zˇa´dna´ znacˇka nenı´, tak Karel nema´ co na pra´ci.
1.7. Cyklus DOKUD NENI Pokusme se nynı´ naucˇit Karla prˇ´ıkaz KE-ZDI: Karel dojde azˇ ke zdi, ktera´ lezˇ´ı neˇkde prˇed nı´m, anizˇ by do nı´ narazil. To znamena´: deˇlej KROK dokud nenı´ zed’. A v Karloveˇ za´pisu: KE-ZDI ZNAMENA DOKUD NENI ZED KROK KONEC KONEC
KE-ZDI - ZED KROK ↑
Chova´nı´ cyklu DOKUD NENI je stejne´ – vykona´va´ se, dokud je splneˇna podmı´nka, zˇe NENI ZED. Znak „-“ v kopenogramu znacˇ´ı negaci podmı´nky. O cyklu DOKUD NENI platı´ vsˇe, jako o DOKUD JE.
1.8. Prˇ´ıkaz KDYZ Existujı´ prˇ´ıpady, kdy je nutno vykona´va´nı´ programu rozdeˇlit na dveˇ cˇa´sti podle neˇjake´ podmı´nky: je-li splneˇna, pak vykonej toto a pokud nenı´, vykonej neˇco jine´ho. Karel je pro takove´ prˇ´ıpady vybaven prˇ´ıkazem KDYZ. Dejme tomu, zˇe chceme Karla naucˇit prˇ´ıkazu ?KROK (opatrny´ krok) – Karel udeˇla´ krok, pokud prˇed nı´m nenı´ zed’: ?KROK ZED
↓
KROK
?KROK ZNAMENA KDYZ JE ZED KONEC JINAK KROK KONEC KONEC
I v tomto prˇ´ıpadeˇ je za´pis kopenogramem prˇehledneˇjsˇ´ı. Vidı´me v neˇm 2 paralelnı´ veˇtve programu: ta leva´, v nasˇem prˇ´ıpadeˇ pra´zdna´, se vykona´, pokud je podmı´nka splneˇna; pokud nenı´ splneˇna, vykona´ se prava´ veˇtev. Tomu odpovı´da´ konstrukce KDYZ — KONEC JINAK — KONEC – vidı´te, zˇe na´m prˇibyl dalsˇ´ı KONEC. To vyply´va´ i z kopenogramu – vodorovna´ cˇa´ra, ukoncˇujı´cı´ blok, znamena´ KONEC. A jesˇteˇ k barvicˇka´m v kopenogramu: za´hlavı´ (obeˇ cˇa´sti) prˇ´ıkazu KDYZ majı´ modrou barvu. Nu a to je ze za´kladnı´ch kamenu˚ Karla vsˇe. Zda´ se Va´m to ma´lo? A prˇece to stacˇ´ı. Pravda, jednu, tu nejdu˚lezˇiteˇjsˇ´ı, veˇc jsem zapomneˇl zdu˚raznit. Bez nı´ by Karel byl skoro k nicˇemu. Je to rekurze.
1.9. Rekurze Co to je rekurze? Strucˇneˇ rˇecˇeno: je to vola´nı´ sebe sama. To znamena´, zˇe prˇi psanı´ nove´ho prˇ´ıkazu uvedeme neˇkde v teˇle na´zev prˇ´ıkazu samotne´ho. Zda´ se Va´m to divoke´? Nu, ano, prˇizna´va´m, ale azˇ pozna´te, jaky´ je ta rekurze mocny´ a kouzelny´ na´stroj, nebude se Va´m bez nı´ chtı´t programovat. Zacˇneme prˇ´ıkazem PIRUETA – Karel se roztocˇ´ı jako krasobruslarˇ a nikdy sa´m od sebe neskoncˇ´ı, pokud ho k tomu nedonutı´me vneˇjsˇ´ım za´sahem. PIRUETA VLEVO-VBOK PIRUETA
PIRUETA ZNAMENA VLEVO-VBOK PIRUETA KONEC
Pta´te se, jak je vu˚bec mozˇne´, zˇe prˇ´ıkaz mu˚zˇe volat sa´m sebe? Snadno. Pokud totizˇ ucˇ´ıte Karla, pak mu na zacˇa´tku kazˇde´ho nove´ho prˇ´ıkazu rˇeknete, jak se ten prˇ´ıkaz bude jmenovat (PIRUETA).
Karel si jej hned zarˇadı´ do sve´ho slovnı´ku (pokud se da´ v dobeˇ definova´nı´ nove´ho prˇ´ıkazu vypsat slovnı´k, tak mu˚zˇete videˇt, zˇe pra´veˇ rozpracovany´ prˇ´ıkaz uzˇ v neˇm je) a od te´ chvı´le uzˇ je pro Karla zna´my´ v tom smyslu, zˇe je jej mozˇno pouzˇ´ıt v definici slozˇeny´ch prˇ´ıkazu˚ (tedy i sebe samotne´ho). Prˇipada´ Va´m prˇ´ıkaz PIRUETA divny´? Mozˇna´, ale funkce je docela jednoducha´. Kdyzˇ zada´te Karlovi prˇ´ıkaz PIRUETA (prˇedtı´m ho ale musı´te PIRUETU naucˇit), podı´va´ se, co ten prˇ´ıkaz znamena´. A vidı´, zˇe znamena´ VLEVO-VBOK. To je primituvum, ktere´ umı´ okamzˇiteˇ vykonat a proto se pootocˇ´ı. Pak na´sleduje prˇ´ıkaz PIRUETA. To nenı´ primitivum a proto se a podı´va´, co zˇe znamena´ PIRUETA. A vidı´, zˇe znamena´ VLEVO-VBOK (primitivum, ktere´ umı´ rovnou vykonat → pootocˇ´ı se) a PIRUETA. Opeˇt se podı´va´, co znamena´ PIRUETA. A vidı´, zˇe . . . Jisteˇ tusˇ´ıte, zˇe bychom to mohli rozepisovat donekonecˇna. Ano, spra´vneˇ. Karel se roztocˇ´ı jako cˇamrda a nebude jevit vu˚li se zastavit. A prˇece – Karel si pokazˇde´, kdyzˇ narazı´ na slozˇeny´ prˇ´ıkaz (a ne na primituvum) poznamena´, zˇe odbı´ha´ deˇlat neˇco jine´ho a zˇe se musı´ potom neˇkam vra´tit, aby dokoncˇil to, co rozdeˇlal. Tento za´sobnı´k nenı´ bezedny´, jako jeho bat’u˚zˇek na znacˇky. A proto se po neˇjake´ dobeˇ stane, zˇe si uzˇ nema´ kam zapsat dalsˇ´ı pozna´mky a zanarˇ´ıka´: UZ ME TO NEBAVI – nebo neˇco na ten zpu˚sob – a skoncˇ´ı. Nenı´ to ale regule´rnı´ konec prˇ´ıkazu – je to jako kdyby naprˇ. narazil do zdi. Zde je jedna mala´ zmeˇna v barva´ch kopenogramu: rˇa´dek, kde se vola´ rekurze, se vybarvuje zˇluteˇ – stejneˇ, jako hlavicˇka programu – aby bylo hned na prvnı´ pohled jasne´, zˇe jde o rekurzi. Urcˇiteˇ si ted’ rˇ´ıka´te – no nic moc, ta rekurze. To byl ale jen ten nejjednodusˇsˇ´ı prˇ´ıpad, ktery´ byl vybra´n pro zacˇa´tek. Rekurzi je samozrˇejmeˇ mozˇno pouzˇ´ıt i efektivneˇji, nezˇ jen k nekonecˇne´mu opakova´nı´. Dejme tomu, zˇe bychom chteˇli Karla naucˇit prˇ´ıkaz NA-ZAPAD, ktery´m se otocˇ´ı tak, aby sta´l cˇelem na za´pad. Jisteˇ Va´s napadlo na´sledujı´cı´ rˇesˇenı´ s pouzˇitı´m cyklu DOKUD: NA-ZAPAD ZNAMENA DOKUD NENI ZAPAD VLEVO-VBOK KONEC KONEC
NA-ZAPAD - ZAPAD VLEVO-VBOK ↑
Nynı´ to ale zkusı´me jinak, pomocı´ KDYZ a rekurze: NA-ZAPAD2 ZAPAD
↓
VLEVO-VBOK NA-ZAPAD2
NA-ZAPAD2 ZNAMENA KDYZ JE ZAPAD KONEC JINAK VLEVO-VBOK NA-ZAPAD2 KONEC KONEC
Jak to funguje? Karel se nejprve podı´va´, zda je otocˇen na za´pad. Pokud ano, pak nic neudeˇla´. To je v porˇa´dku. Pokud nenı´ na za´pad, pak udeˇla´ primitivum VLEVO-VBOK a zavola´ opeˇt NA-ZAPAD2. Podı´va´ se, je-li na za´pad. Pokud nenı´, udeˇla´ primitivum VLEVO-VBOK a zavola´ NA-ZAPAD2 . . . Toto je prˇ´ıklad postupne´ho zjednodusˇova´nı´ u´lohy. Dejme tomu, zˇe ma´me vyrˇesˇit neˇjaky´ proble´m (otocˇenı´ na za´pad), ktery´ se skla´da´ z nezna´me´ho pocˇtu zjednodusˇujı´cı´ch kroku˚ (VLEVO-VBOK). A tak mu˚zˇeme postupovat tak, zˇe: 1. Otestujeme, zda-li uzˇ je proble´m vyrˇesˇen 2. Pokud nenı´, udeˇla´me dı´lcˇ´ı zjednodusˇenı´ (VLEVO-VBOK) a vra´tı´me se k bodu 1. 3. Pokud je proble´m vyrˇesˇen, ma´me vyhra´no.
Vsˇechno mu˚zˇe by´t samozrˇejmeˇ daleko slozˇiteˇjsˇ´ı, ale pokud najdeme v proble´mu tuto za´vislost, ma´me vyhra´no. Azˇ dosud vlastneˇ neza´lezˇelo na tom, kam se Karel v rekurzi vracı´ – protozˇe pak na´sleduje stejneˇ jen KONEC. Tomuto uzˇitı´ rekurze se rˇ´ıka´ neprava´ rekurze. Jisteˇ uzˇ tusˇ´ıte, zˇe kdyzˇ existuje rekurze neprava´, zˇe bude existovat i rekurze neleva´. Ano, ale rˇ´ıka´ se jı´ prava´. A u prave´ rekurze velmi za´lezˇ´ı, jestli se vra´tı´me a kam. Zˇe Va´m nenı´ jasne´ to vracenı´ se zpa´tky? Dobra´, vrat’me se ted’ my k prˇ´ıkazu VPRAVO-VBOK (tomu prostrˇednı´mu). Jak jej Karel vlastneˇ vykona´va´? Podı´va´ se, jak je definova´n. A vidı´, zˇe je tam prˇ´ıkaz CELEM-VZAD. Ten prˇ´ıkaz nenı´ primitivum, takzˇe bude muset prˇerusˇit vykona´va´ni prˇ´ıkazu VPRAVO-VBOK a jı´t se veˇnovat prˇ´ıkazu CELEM-VZAD. Nejprve si ale do za´sobnı´ku poznamena´, kam se pak ma´ vra´tit – na druhy´ prˇ´ıkaz ve VPRAVO-VBOK. Pak se vrhne na prˇ´ıkaz CELEM-VZAD. Jakpak je definova´n? Je tam VLEVO-VBOK – to je primitivum, ktere´ umı´ vykonat a tak jej hned vykona´, da´le dalsˇ´ı VLEVO-VBOK – opeˇt jej ihned vykona´ a na´sleduje KONEC. Karel by ra´d skoncˇil, ale je poslusˇny´ (a dobrˇe naprogramovany´) a tak se podı´va´ do sve´ho za´pisnı´ku/za´sobnı´ku, jestli se na´hodou nema´ k neˇcˇemu vracet. A skutecˇneˇ – ma´ tam napsa´no, zˇe se ma´ vra´tit na druhy´ prˇ´ıkaz prˇ´ıkazu VPRAVO-VBOK. Dobra´, to je VLEVO-VBOK – primitivum, umı´me, okamzˇiteˇ vykona´me – a pak je tam KONEC. Karel se opeˇt podı´va´ do za´pisnı´ku/za´sobnı´ku, ale tam uzˇ nic nenı´, protozˇe si prˇedchozı´ pozna´mku sˇkrtnul. Mu˚zˇe tedy s klidny´m srdcem, ktere´ je urcˇiteˇ z elektronek, ukoncˇit vsˇechno vykona´va´nı´. Graficky by se to dalo ztva´rnit asi takto: VPRAVO-VBOK ZNAMENA CELEM-VZAD → CELEM-VZAD ZNAMENA VLEVO-VBOK VLEVO-VBOK ← KONEC VLEVO-VBOK KONEC Zˇe se Va´m to zda´ jednoduche´? ALE ONO TO JE JEDNODUCHE´. A procˇ se tomu tak obsˇ´ırneˇ veˇnuji? Protozˇe u rekurze je ten rozdı´l (on to vlastneˇ ani rozdı´l nenı´), zˇe se nevola´ jiny´ prˇ´ıkaz, ale zˇe se prˇ´ıkaz vola´ sa´m. To ale Karel netusˇ´ı – pro neˇj jsou vsˇechny slozˇene´ prˇ´ıkazy rovnocenne´ – musı´ si poznamenat do za´sobnı´ku, kam se ma´ vra´tit.
1.10. Prˇena´sˇenı´ znacˇek Meˇjme tento u´kol: Karel stojı´ na neˇkolika znacˇka´ch a nema´ prˇed sebou zed’. Jeho u´kolem je vybrat znacˇky a prˇene´st je o jedno polı´cˇko da´l a tam je zase polozˇit – tolik, kolik jich prˇedtı´m nasbı´ral. Tento proble´m je mozˇno rˇesˇit i bez pouzˇitı´ rekurze, pomocı´ DOKUD, a to takto: PRENES ZNACKA ZVEDNI KROK POLOZ CELEM-VZAD KROK CELEM-VZAD ↑
KROK
PRENES ZNAMENA DOKUD JE ZNACKA ZVEDNI KROK POLOZ CELEM-VZAD KROK CELEM-VZAD KONEC KROK KONEC
Jak to funguje asi uha´dnete sami. Dokud je na polı´cˇku, kde Karel stojı´, znacˇka, tak ji zvedne, udeˇla´ krok, tam ji polozˇ´ı a zase se vra´tı´. Nakonec, kdyzˇ tam uzˇ zˇa´dne´ znacˇky nejsou, udeˇla´ Karel krok na cı´love´ polı´cˇko. Jisteˇ, cı´l to splnilo, ale co se Karel nabeˇha´ – s kazˇdou znacˇkou zvla´sˇt’(a to ma´ na za´dech na znacˇky bat’u˚zˇek), porˇa´d se tocˇ´ı . . . Nesˇlo by to rˇesˇit jednodusˇeji, elegantneˇji? Sˇlo, ale jen s rekurzı´: PRENES2 ZNACKA ZVEDNI PRENES2 POLOZ
↓
KROK
PRENES2 ZNAMENA KDYZ JE ZNACKA ZVEDNI PRENES2 POLOZ KONEC JINAK KROK KONEC KONEC
Mozˇna´ na to ted’ neveˇrˇ´ıcneˇ hledı´te a rˇ´ıka´te si: to je neˇjake´ podezrˇele´. Ale nenı´. Je to naprosto regule´rnı´ prˇ´ıkaz. Pokusı´m se Va´m popsat vykona´va´nı´ tohoto prˇ´ıkazu pro prˇ´ıpad, zˇe pod Karlem jsou 2 znacˇky. Pracuje to samozrˇejmeˇ naprosto stejneˇ pro libovolny´ pocˇet znacˇek, jen by se to sem veˇtsˇ´ı nevesˇlo. PRENES2 ZNAMENA KDYZ JE ZNACKA ZVEDNI PRENES2 → PRENES2 ZNAMENA KDYZ JE ZNACKA ZVEDNI PRENES2 → PRENES2 ZNAMENA KDYZ JE ZNACKA KONEC JINAK KROK KONEC ← KONEC POLOZ KONEC JINAK KONEC ← KONEC POLOZ KONEC JINAK KONEC KONEC Je trˇeba poznamenat, zˇe v podmı´nce KDYZ je rozepisova´na jen ta veˇtev, ktera´ se vykona´va´ vzhledem ke splneˇnosti podmı´nky. Nenı´ to rˇesˇenı´ na´dherne´? Karel si vlastneˇ spocˇ´ıtal znacˇky tı´m zpu˚sobem, zˇe si postupneˇ zapisoval do za´sobnı´ku na´vraty na prˇ´ıkaz POLOZ. I po stra´nce cˇasove´ deˇla´ Karel minimum prˇ´ıkazu˚ – a vykona´va´nı´ trva´ minimum cˇasu. O tomto prˇ´ıkazu (a o vsˇech s touto strukturou) je mozˇne´ rˇ´ıci na´sledujı´cı´: cˇa´st za rekurzı´ (POLOZ) se vykona´ tolikra´t, jako cˇa´st prˇed rekurzı´ (ZVEDNI). Druha´ veˇtev (KROK) se provede jednou, a to mezi nimi.
S touto znalostı´ se mu˚zˇeme pustit do dalsˇ´ıho klasicke´ho prˇ´ıkladu – PUL – Karel dojde do poloviny vzda´lenosti mezi nı´m a zdı´. Zˇe nevı´te, jak na to? Trochu Va´m napovı´m. Karel si cestou ke zdi spocˇ´ıta´ dvojkroky, ktere´ musel udeˇlat a zpeˇt udeˇla´ pra´veˇ tolik kroku˚. Jesˇteˇ nic? Prˇemy´sˇlejte, jenom cˇ´ıst – to nenı´ ta spra´vna´ cesta programova´nı´. Ale abyste se netra´pili, tady je rˇesˇenı´: VZAD CELEM-VZAD KROK CELEM-VZAD
PUL ZED
↓
KROK ?KROK PUL VZAD
1.11. Hanojske´ veˇzˇe Zna´te proble´m Hanojsky´ch veˇzˇ´ı? Ne? Tak poslouchejte. Kdesi ve stare´m Tibetu je kla´sˇter, kde majı´ zajı´mavou veˇc: zlatou, strˇ´ıbrnou a platinovou tycˇ, na ktery´ch je navlecˇeno 64 krouzˇku˚ posa´zeny´ch diamanty. Krouzˇky jsou odstupnˇova´ny podle velikosti – dole je nejveˇtsˇ´ı, nahorˇe je nejmensˇ´ı. Na pocˇa´tku byly vsˇechny krouzˇky navlecˇeny na ´ kolem tamnı´ch mnichu˚ je prˇemı´stit celou pyramidu krouzˇku˚ na tycˇ strˇ´ıbrnou. Musı´ zlate´ tycˇi. U ale dodrzˇovat na´sledujı´cı´ pravidla: • Vzˇdy je mozˇno prˇena´sˇet pouze jeden krouzˇek z jedne´ tycˇe na druhou • Nenı´ mozˇno umı´stit veˇtsˇ´ı krouzˇek na mensˇ´ı. Pta´te se, co ma´ spolecˇne´ho Tibetsky´ kla´sˇter s Karlem? Inu to, zˇe tento proble´m je mozˇno pomeˇrneˇ efektivneˇ algoritmizovat a naprogramovat, a to i v Karlovi. Zˇe neveˇrˇ´ıte? Prˇesveˇdcˇte se na dalsˇ´ıch rˇa´dcı´ch. Nejprve se pokusme najı´t postup, jaky´m je mozˇno proble´m rˇesˇit. Asi jizˇ tusˇ´ıte, zˇe na to pu˚jdeme prˇes rekurzi. Spra´vneˇ, bude to nejefektivneˇjsˇ´ı. Postup prˇena´sˇenı´ veˇzˇe lze kra´sneˇ popsat na´sledujı´cı´m rekurzivnı´m algoritmem: • Pokud nenı´ zˇa´dny´ krouzˇek k prˇena´sˇenı´, pak nenı´ co deˇlat (okrajova´ podmı´nka) • Prˇesunˇ veˇzˇ od druhe´ho kolecˇka odspodu na pomocnou tycˇ (vlastneˇ rekurze) • Prˇenes nejspodneˇjsˇ´ı krouzˇek na cı´lovou tycˇ • Prˇenes veˇzˇ z pomocne´ tycˇe na cı´lovou (opeˇt rekurze) To je cele´. Zˇe to je jednoduche´? Ano, to je tou rekurzı´. Nu a jak budeme tycˇe reprezentovat v Karlovi? Tak trˇeba na´sledovneˇ: • Jednotlive´ krouzˇky budou zna´zorneˇny znacˇkami nad sebou • Jednotlive´ tycˇe budou sloupce ve meˇsteˇ • Ty trˇi tycˇe je trˇeba postavit „do kruhu“ – aby od kazˇde´ byla jedna vpravo a jedna vlevo. • Krouzˇku˚ nebude 64, to bychom se konecˇne´ho rˇesˇenı´ nedocˇkali a ani nema´me tak velke´ meˇsto. Bude jich, dejme tomu, 9. POZOR – nad poslednı´m je trˇeba jesˇteˇ jedna volna´ rˇada ve meˇsteˇ! Obra´zek 2 ukazuje mozˇne´ za´kladnı´ postavenı´. Je vytvorˇena veˇzˇ z 9-ti krouzˇku˚, Karel ji bude prˇena´sˇet doprava. Velikost krouzˇku je reprezentova´na pocˇtem znacˇek – nema´ to vliv na prˇena´sˇenı´.
Obr. 2: Za´kladnı´ postavenı´ na „Hanojske´ veˇzˇe“
Rˇ´ıkali jsme, zˇe Karel musı´ mı´t dojem, zˇe ty trˇi tycˇe jsou do kruhu, t.j. zˇe z kazˇde´ se da´ jı´t vlevo i vpravo. Aby toto bylo splneˇno, ma´me prˇ´ıkaz PRESUN. Pro prˇenesenı´ libovolne´ho pocˇtu znacˇek ve smeˇru, ktery´m je Karel natocˇen, napisˇme prˇ´ıkaz PRENES-DISK – bude modifikacı´ prˇ´ıkazu pro prˇena´sˇenı´ znacˇek o jeden krok: PRESUN ZED CELEM-VZAD KE-ZDI CELEM-VZAD
PRENES-DISK ↓
KROK
ZNACKA ZVEDNI PRENES-DISK POLOZ
↓
PRESUN
Nynı´ si musı´me ujasnit, jak budeme prˇena´sˇet subveˇzˇe: budeme je prˇena´sˇet na druhou stranu, nezˇ potrˇebujeme prˇene´st celou veˇzˇ. Potrˇebujeme tedy udeˇlat krok na sever a natocˇit se do opacˇne´ho smeˇru, nezˇ pu˚vodneˇ. Podobneˇ potrˇebujeme pote´ sle´zat dolu˚: NAHORU
DOLU
SEVER ↓ KROK VLEVO-VBOK NAHORU VLEVO-VBOK
JIH KROK
↓
VLEVO-VBOK DOLU VLEVO-VBOK
Dejme tomu, zˇe prˇ´ıkaz pro prˇenesenı´ Hanojske´ veˇzˇe se bude jmenovat HANOJ. Na neˇj Karel prˇenese veˇzˇ od u´rovneˇ, na ktere´ stojı´, ve smeˇru, do ktere´ho je natocˇen. Co bude obsahovat? Jednak onu okrajovou podmı´nku – pokud nenı´ znacˇka, tak se nemusı´ nic prˇena´sˇet. Pak bude obsahovat pokyn k prˇenesenı´ subveˇzˇe na druhou stranu (NAHORU + HANOJ – rekurze), po prˇenesenı´ subveˇzˇe skoncˇ´ı Karel tam, kde zacˇal, takzˇe musı´ zase sle´zt dolu˚ (DOLU), prˇene´st jeden disk (PRENES-DISK), prˇesunout se na prˇenesenou subvezˇ (PRESUN + NAHORU), prˇenesenı´ subveˇzˇe na uzˇ prˇeneseny´ za´kladnı´ disk (HANOJ – dalsˇ´ı rekurze), navra´cenı´ se na dolnı´ u´rovenˇ (DOLU) a prˇesunout se na vy´chozı´ mı´sto, odkud jsme celou veˇzˇ prˇenesli (PRESUN). HANOJ ZNACKA NAHORU HANOJ DOLU PRENES-DISK PRESUN NAHORU HANOJ DOLU PRESUN
↓
Samozrˇejmeˇ byste si to meˇli zkusit na vlastnı´ ocˇi na pocˇ´ıtacˇi, jinak neuveˇrˇ´ıte.
1.12. Za´veˇr To je vsˇe o za´kladech jazyka Karel. Ja´ se zna´m s Karlem od roku 1985, kdy mi bylo 13 let, a s odstupem cˇasu se k neˇmu ra´d vracı´m. Povazˇuji ho za genia´lnı´ na´pad – co veˇcı´ se da´ deˇlat s osmi jednoduchy´mi prˇ´ıkazy a malinkaty´m robotkem. Ne nadarmo se rˇ´ıka´: V jednoduchosti je genialita. Prˇeji Va´m, abyste si Karla zamilovali tak, jako ja´.
2. PC–Karel – Karel pro IBM-PC Program PC-Karel je interpretrem jazyka Karel pro pocˇ´ıtacˇe IBM–PC. Existuje ve dvou verzı´ch: PC-Karel 3.1 je v provedenı´ pro MS–DOS, PC-Karel 4 je pro MS–Windows. Obeˇ implementace jsou velmi podobne´, prˇ´ıpadne´ odlisˇnosti jsou oznacˇeny D (platı´ pouze pro DOS verzi) nebo W (platı´ pouze pro Windows verzi).
PC–Karel 3.1 D
W
• • • • • • D
•
PC–Karel 4
Interpret jazyka Karel PC-Karel se skla´da´ pouze z programu KAREL.EXE. Pra´ce je mozˇna´ ve dvou rezˇimech: graficke´m (na karta´ch EGA/VGA a Hercules) a textove´m. Implicitneˇ se nastavuje graficky´ rezˇim. Pokud vyzˇadujete textovy´, ktery´ je vy´razneˇ rychlejsˇ´ı, je trˇeba prˇi spousˇteˇnı´ zadat parametr /t – Text nebo /tm – Text Mono. Identifikace Vasˇ´ı graficke´ karty by meˇla probeˇhnout automaticky. Pokud by ale nastaly proble´my, pokuste se programu vnutit pomocı´ parametru˚ /e – EGA/VGA, /m – EGA/VGA Mono nebo /h – Hercules graficky´ adapte´r, ktery´ je ve Vasˇem pocˇ´ıtacˇi. Program je doda´va´n jako samorozbalovacı´ archiv EXE spolu s licencˇnı´m ujedna´nı´m (soubor licence.kam v ko´dova´nı´ Kamenicky´ch, licence.852 v ko´dova´nı´ CP852). Interpret jazyka Karel PC-Karel se skla´da´ pouze z programu KAREL16.EXE (verze Windows 3.1/3.11), prˇ´ıpadneˇ KAREL32.EXE (verze Windows 95/98/ME/NT/2000). Verze pro Windows 3.1/3.11 je doda´va´na jako samorozbalovacı´ archiv EXE spolu s licencˇnı´m ujedna´nı´m (soubor licence.txt). Verze pro Windows 95/98/ME/NT/2000 je doda´va´na jako instalacˇnı´ EXE a instaluje se standardnı´m zpu˚sobem pro tyto operacˇnı´ syste´my. Program mu˚zˇe kromeˇ barevne´ho rezˇimu pracovat i v cˇernobı´le´m – volba se prova´dı´, stejneˇ jako ovla´da´nı´ dalsˇ´ıch Windowsı´ch vlastnostı´, prˇes syste´move´ menu (ikona v leve´m hornı´m rohu okna). Program PC-Karel vycha´zı´ z programu˚ KAREL92 – KAREL94 a je s nimi kompatibilnı´. Vsˇechny prˇ´ıkazy se zada´vajı´ jako jednotliva´ slova. O prˇ´ıpadne´ dalsˇ´ı (podmı´nky) si PC-Karel rˇekne sa´m. Prˇ´ıkazy je mozˇno zkracovat – napsat jen neˇkolik pocˇa´tecˇnı´ch pı´smen s tecˇkou na konci. V definici nove´ho prˇ´ıkazu ma´ „Enter ( ↵)“ vy´znam prˇ´ıkazu KONEC. Je mozˇno listovat v 9-ti posledneˇ zadany´ch prˇ´ıkazech pomocı´ kla´ves „↑“ a „↓“. Maxima´lnı´ pocˇet znacˇek na jednom polı´cˇku je 9. V prˇ´ıkaze MESTO je zavedeno nastavenı´ pauzy – doba v [ms], kterou se cˇeka´ vzˇdy prˇi vykona´nı´ vy´konne´ho primitiva (KROK, VLEVO-VBOK, POLOZ, ZVEDNI). Rychlost vykona´va´nı´ (velikost pauzy) je mozˇno prˇi vykona´va´nı´ plynule meˇnit pomocı´ kla´ves „+“ a „-“.
• Stiskem kla´vesy „Shift“ poprˇ. zamknutı´m pomocı´ „CapsLock“ je prˇ´ıkaz prova´deˇn maxima´lnı´ rychlostı´ (odpovı´da´ nastavenı´ =0 ms). • Prova´deˇnı´ prˇ´ıkazu se ukoncˇuje stiskem kla´vesy „Esc“. • Je mozˇno ukla´dat a nacˇ´ıtat obsah meˇsta: v rezˇimu MESTO pomocı´ kla´ves „F2“ a „F3“. Meˇsto, ktere´ se zada´ i s prˇ´ıponou „.MES“ prˇi spousˇteˇnı´ programu, se ihned nacˇte. • Je zaveden cyklus s podmı´nkou na konci OPAKUJ — POKUD. Zada´va´ se jako OPAKUJ, na dotaz na pocˇet opakova´nı´ se odpovı´ pouze „Entrem ( ↵)“. Slovo POKUD se zada´va´ jako KONEC, na´sleduje ota´zka na podmı´nku. • Je mozˇno pouzˇ´ıvat konstrukce KDYZ NENI — KONEC JINAK — KONEC. • Nacˇ´ıta´nı´ a ukla´da´nı´ slovnı´ku je mozˇne´ pomocı´ klı´cˇovy´ch slov ULOZ a NACTI. Slovnı´k, ktery´ se ma´ nacˇ´ıst prˇi startu programu, je mozˇno zadat jako parametr prˇ´ıkazove´ rˇa´dky (nemusı´ obsahovat prˇ´ıponu „.KAR“). W Slovnı´k je mozˇno ulozˇit i nacˇ´ıst v textove´ podobeˇ – tato forma nenı´ nacˇtitelna´ do DOSove´ verze. Slovnı´k lze vymazat pomocı´ klı´cˇove´ho slova SMAZ. • Jsou zavedeny nove´ podmı´nky: STISKNUTO – test stisku „Ctrl“, 1–9 (pocˇet znacˇek), PLNO (plne´ polı´cˇko znacˇek – totozˇne´ s 9), X1–X10 a Y1–Y15 pro pozici na dvorku pocˇ´ıtanou od leve´ho dolnı´ho rohu, NAHODA pro asi 50% splneˇnı´. • Je mozˇno generovat kopenogramy pomocı´ klı´cˇove´ho slova KOPENOGRAM. D V kopenogramech je mozˇno nahradit dvojitou cˇa´ru za jednoduchou pomocı´ parametru /kj – Kopenogram Jednoduchy´, tisknout kopenogram ze znaku˚ „=-+|“ pomocı´ parametru /kt – Kopenogram Textovy´. Pro zobrazova´nı´ v CP852 je mozˇne´ odpojit dvojitou cˇa´ru od jednoduche´ pomocı´ parametru /kl – Kopenogram Latin2. • ROZKLAD, SLOVNIK a KOPENOGRAM je mozˇno posı´lat do souboru. Jme´no tohoto souboru se zada´ po prˇ´ıkazu TISKNI. Nove´ veˇci se prˇipojujı´ na konec tohoto souboru. Tisk se koncˇ´ı prˇ´ıkazem NETISKNI. W V prˇ´ıkazu TISKNI je mozˇno zvolit vy´stupnı´ forma´t: HTML nebo textovy´ s volbou ra´meˇcˇku ˚ v KOPENOGRAMech – textove´ (slozˇene´ ze znaku˚ „=-+|“), jednoduche´ ra´mecˇky, dvojite´ ra´mecˇky nebo ra´mecˇky pro CP852 (odpojenı´ dvojite´ vodorovne´ cˇa´ry od svisle´). D V rezˇimu MESTO je mozˇno vytisknout meˇsto – tiskne se bud’ textoveˇ do souboru prˇ´ıkazu TISKNI – pomocı´ kla´vesy „F5“, nebo graficky bud’ na prn (pro Epson, Star . . .) pomocı´ kla´vesy „F8“ nebo do souboru .PCX kla´vesou „F9“. W Meˇsto je mozˇno kopı´rovat do schra´nky (clipboardu) prˇes nabı´dku v syste´move´m menu. Kopı´ruje se cˇernobı´le nebo barevneˇ – podle aktua´lnı´ho zobrazenı´. D V rezˇimu psanı´ prˇ´ıkazu je mozˇno ovla´dat meˇsto: pomocı´ „L-Shift + Kurzory“ – pohyb Karla po dvorecˇku, „R-Shift + Kurzory“ – nata´cˇenı´ Karla, „Alt + N, P, S, Z, 0..9“ – Nove´, Polozˇ, Smazˇ, Zed’, pocˇet znacˇek – odpovı´da´ rezˇimu MESTO. W V rezˇimu psanı´ prˇ´ıkazu je mozˇno ovla´dat meˇsto: pomocı´ „Ctrl + Kurzory“ – pohyb Karla po dvorecˇku, „Ctrl + Shift + Kurzory“ – nata´cˇenı´ Karla, „Ctrl + N, P, S, Z“ – Nove´, Polozˇ, Smazˇ, Zed’ – odpovı´da´ rezˇimu MESTO. D Klı´cˇovy´m slovem OPRAV se spousˇtı´ jednoduchy´ editor pro opravu prˇ´ıkazu (zada´ se jeho jme´no) nebo psanı´ prˇ´ıkazu˚ novy´ch (zada´ se pra´zdne´ jme´no). Editova´nı´ se koncˇ´ı kla´vesami „Ctrl+E“ – akceptova´nı´ napsane´ho, nebo „Esc“ – zrusˇenı´ napsane´ho. Pokud se po zada´nı´ „Ctrl+E“ neobnovı´ Karlova obrazovka, ny´brzˇ se zu˚stane v editoru, pak se Karlovi neˇco ve Vasˇem za´pise nelı´bilo – kurzor je nastaven na kriticke´ mı´sto a v poslednı´ rˇa´dce svı´tı´ kra´tka´ na´poveˇda.
Klı´cˇovy´m slovem OPRAV se spousˇtı´ editor pro opravu prˇ´ıkazu (zada´ se jeho jme´no) nebo psanı´ prˇ´ıkazu˚ novy´ch (zada´ se pra´zdne´ jme´no). Po ukoncˇenı´ editoru je nutno stisknout neˇkterou kla´vesu, aby dosˇlo k nacˇtenı´ noveˇ nadefinovany´ch prˇ´ıkazu˚ • Nakonec nejdu˚lezˇiteˇjsˇ´ı: PC-Karel se koncˇ´ı prˇ´ıkazem KONEC.
W
Tento program byl oceneˇn v souteˇzˇi Ministerstva sˇkolstvı´, mla´dezˇe a teˇlovy´chovy Cˇeske´ republiky „Duhova´ disketa 93“. Na za´veˇr bych chteˇl podeˇkovat vsˇem, kterˇ´ı mi rˇ´ıkali a psali sve´ prˇipomı´nky a na´meˇty a tı´m pomohli k rozvoji programu. ´ RUKY; jde o volne´ programove´ vybavenı´ jehozˇ sˇ´ırˇenı´ Tento program je ABSOLUTNEˇ BEZ ZA je za jisty´ch podmı´nek vı´ta´no. Podrobnosti najdete v cˇa´sti Licencˇnı´ ujedna´nı´. Budu Va´m vdeˇcˇny´ za jake´koliv prˇipomı´nky at’uzˇ k programu, nebo k textu samotne´mu.
3. Licencˇnı´ ujedna´nı´ 1. Smı´te pouzˇ´ıvat tento program bez jake´hokoliv omezenı´. Toto pouzˇ´ıva´nı´ je bezu´platne´. 2. Smı´te rozmnozˇovat a sˇ´ırˇit kompletnı´ kopii tohoto programu tak, jak jste ji obdrzˇeli. Toto sˇ´ırˇenı´ je bezu´platne´. Za fyzicky´ akt prˇenesenı´ kopie programu mu˚zˇete zˇa´dat poplatek. 3. Zˇa´dne´ modifikace tohoto programu nejsou povoleny. 4. Vzhledem k bezplatne´mu poskytnutı´ licence k tomuto programu se na neˇj NEVZTAHUJE ´ DNA ´ ZA ´ RUKA, a to v mı´rˇe povolene´ za´konem. Tento program je poskytova´n „tak, jak ZˇA je“, bez za´ruky jake´hokoliv druhu, at’vy´slovne´ nebo vyply´vajı´cı´, vcˇetneˇ, ale nikoli jen, za´ruk prodejnosti a vhodnosti pro urcˇity´ u´cˇel. Pokud jde o kvalitu a vy´konnost programu, lezˇ´ı vesˇkere´ riziko na va´s. V zˇa´dne´m prˇ´ıpadeˇ, s vy´jimkou toho, kdyzˇ to vyzˇaduje platny´ za´kon, va´m nebude zˇa´dny´ z drzˇitelu˚ autorsky´ch pra´v odpoveˇdny´ za sˇkody, vcˇetneˇ vsˇech obecny´ch, specia´lnı´ch, nahodily´ch nebo na´sledny´ch sˇkod vyply´vajı´cı´ch z uzˇ´ıva´nı´ anebo neschopnosti uzˇ´ıvat programu (vcˇetneˇ ale nikoli jen, ztra´ty nebo zkreslenı´ dat, nebo trvaly´ch sˇkod zpu˚sobeny´ch va´m nebo trˇetı´m strana´m, nebo selha´nı´ funkce programu v soucˇinnosti s jiny´mi programy), a to i v prˇ´ıpadeˇ, zˇe takovy´ drzˇitel autorsky´ch pra´v nebo jina´ strana byli upozorneˇni na mozˇnost takovy´ch sˇkod. 5. Vsˇechna pra´va, ktera´ nejsou vy´slovneˇ udeˇlena, jsou vyhrazena nositeli autorsky´ch pra´v. 6. Platnost te´to licence nenı´ omezena u´zemı´m Cˇeske´ republiky. 7. Instalacı´ a pouzˇitı´m tohoto programu souhlası´te s teˇmito licencˇnı´mi podmı´nkami. Pokud s nimi nesouhlası´te, nepokracˇujte v instalaci nebo tento program odinstalujte.