Robot Karel

Tak a je čas na skutočné programovanie...

Čo to vlastne znamená? Pod programovaním v jazyku robota Karla chápeme napísanie jednej alebo viacerých procedúr. Procedúra je postupnosť príkazov, ktoré robí niečo zmysluplné a príkaz je buď jednoduchá inštrukcia (ako ju poznáme z lekcie 2), riadiaci príkaz (cykly a podmienené príkazy) alebo vykonanie inej procedúry.

Zvyčajný postup pri programovaní (a nie iba pre Karla) je rozdeliť zložitý problém na niekoľko jednoduchších, potom na ešte jednoduchšie a tak ďalej, až kým nie sú jednotlivé čiastkové problémy také jednoduché, že ich vieme vyriešiť pomocou jednoduchých procedúr s niekoľkými príkazmi. Tento krok sa zvyčajne nazýva analýza. Z týchto procedúr môžeme vytvoriť zložitejšie a z nich ešte zložitejšie až pokial nebudeme mať procedúru, ktorá rieši celý povodný zložitý problém. Tento krok sa zvyčajne nazýva vývoj. Po ňom nasleduje testovanie a na záver (pre programátorov najbolestivejší moment) dokumentovanie programu.

Vyskúšajte si to na jednoduchom príklade: Karel stojí uprostred prázdneho sveta a úloha je postaviť čo najvyšší múr po jeho obvode. Vypadá to ako zložitý problém, takže skúsme ho rozanalyzovať. Nechceme začať stavať múr zo stredu sveta, čiže najprv musíme Karla dostať na okraj a do niektorého rohu. Potom môžeme začať stavať, ale najprv sa musíme rozhodnúť, či chceme stavať každú stenu zvlášť a jednu po druhej alebo naopak všetky steny naraz, vrstvu po vrstve. Ale moment, ako sme sa naučili v predchádzajúcej lekcii, Karel nemôže zostúpiť alebo vystúpiť o viac ako jeden schod, čiže stavať múr jednu stenu po druhej asi nebude dobrý nápad, len by sme si to skomplikovali. Musíme stavať vrstvu po vrstve. Zdá sa, že sme identifikovali niekoľko jednoduchších problémov:

1. potrebujeme Karla dostať na okraj sveta,

2. potrebujeme Karla dostať do rohu,

3. potrebujeme postaviť múr,

4. chceme ho postaviť po vrstvách a

5. každú vrstvu jednu stranu po druhej.

Tak to by sme mali, teraz napíšeme procedúry na riešenie týchto jednoduchších problemov...

Prvá procedúra, nazvime ju ChoďNaOkraj  bude opakovať krok pokiaľ Karel nedôjde na okraj sveta. Z prechádzajúcej lekcie už vieme, ako urobiť krok, ale ako to opakovať pokiaľ treba? Tejto konštrukcií sa v programovacích jazykoch hovorí cyklus. Karel pozná dva druhy cyklov. Jeden slúži na zopakovanie niečoho určitý počet krát (použijeme ho neskôr) a druhý na zopakovanie niečoho, kým platí nejaká podmienka.

A čo môže byť tá podmienka? Karel ich pozná niekoľko, každá z nich môže byt splnená alebo nesplnená. Napríklad JeVoľno (je splnená, ak Karel môže urobiť krok na pole pred ním) a NieJeVoľno (je splnená, ak Karel ten krok urobiť nemôže). Tiež pozná JeTehla (splnená, ak Karel stoji na jednej alebo viacerých tehlách), JeZnačka (splnená, ak Karel stojí na poli, na ktorom je značka), JeOtočenýNaSever (je splnená, ak je Karel otočený na sever, čo je pravá horná strana sveta). Zrejme je jasné, čo znamenajú podmienky JeOtočenyNaVýchod, JeOtočenýNaJuh a JeOtočenýNaZápad alebo NieJeTehla, NieJeZnačka, NieJeOtočenýNaSever, NieJeOtočenyNaVýchod, NieJeOtočenýNaJuh a NieJeOtočenýNaZápad.

Zápis procedúry ChoďNaOkraj bude v programovacom jazyku pre Karla vypadať napríklad takto:

Procedúra ChoďNaOkraj

  Kým JeVoľno

    Krok

  KoniecKým

KoniecProcedúra

V Karlovi ju vytvoríme nasledovným spôsobom: ťuknite na tlačítko Upraviť v okne Knižnica, potom na tlačítko + a na tlačítko Upraviť v okne Procedúra. Premenujte procedúru z NováProcedúra na ChoďNaOkraj, potom ťuknite na tlačítko + a vyberte príkaz kým a podmienku JeVoľno. Týmto ste zadali prvý príkaz, v tomto prípade príkaz prázdneho cyklu.

V ďalšom kroku pridajte do tela cyklu príkaz Krok. Ťuknite na + v zelenom krúžku vedľa príkazu KoniecKým, vyberte príkaz Krok a ste naspať v tele procedúry a hotoví, takže ťuknite na Hotovo. Ak ste neurobili nejakú chybu, malo by to vypadať takto:

Je čas skúsiť, či procedúra robí to, čo má. Vymažte svet ťuknutím na ikonu kôš v pravom okne a potom na tlačítko Vykonaj vľavo dole v okne procedúry. Karel by mal urobiť niekoľko krokov a zastaviť na okraji sveta.

Teraz napíšte ďalšiu procedúru, ktorá Karla pošle do rohu. Čo to znamená? Mal by sa otočiť vpravo a hmmm... potom opakovať krok kým nenarazí znovu na okraj sveta. Vypadá to tak, že môžete znovu použiť procedúru ChoďNaOkraj. Tak poďme na to:

Procedúra ChoďDoRohu 

  ChoďNaOkraj

  VpravoVbok

  ChoďNaOkraj

ProcedúraKoniec

Ako to vložiť do iPad-u? Ťuknite na <Knižnica, potom + na vytvorenie ďalšej procedúry, Upraviť, potom premenujte na ChodDoRohu, ťuknite tlačítko +, príkaz Vykonaj, procedúra ChodNaOkraj, znovu tlačitko +, príkaz VľavoVbok, ešte raz tlačítko +, príkaz Vykonaj a procedúra ChodNaOkraj... Tlačitko Hotovo a je to.

Teraz skúsime zložitejšie procedúry. Vymažte znovu svet a skúste vykonať procedúru ChoďDoRohu, či ste neurobili chybu. Ak nie, Karel stojí v dolnom rohu a môže začat stavať múr. Napíšte na to dve procedúry. Prvá postaví jednu vrstvu jednej steny a druhá jednu vrstvu všetkých štyroch stien.

Procedúra PostavJednuStenu

  VpravVbok

  Kým JeVoľno

    Krok

    PoložTehlu

  KoniecKým

KoniecProcedúra

Procedúra PostavJednuVrstvu

  Opakuj 4x

    Vykonaj PostavJednuStenu

  KoniecOpakuj

KoniecProcedúra

Ako ste si iste všimli, v poslednej procedúre ste použili novú konštrukciu - cyklus Opakuj, v ktorom miesto podmienky je počet opakovaní.

Teraz je čas dať všetko dohromady a napísať poslednú a hlavnú procedúru programu:

Procedúra PostavStenu

  Vykonaj ChoďDoRohu

  Opakuj 9x

    Vykonaj PostavJednuVrstvu

  KoniecOpakuj

KoniecProcedúra

Vložte všetky procedúry do iPad-u, vykonajte poslednú z nich a pozrite sa, ako to dopadlo... Ak ste neurobili žiadnu chybu, malo by to vypadať takto:

Dobre, toto je, čo by ste mali vidiet, ak ste všetko urobili správne. Ale čo ak nie alebo ak proste chcete niečo zmeniť? Našťastie, to nie je žiadny problém. Otvorte procedúru, v ktorej je chyba, ťuknite na tlačítko Upraviť a môžete premenovať procedúru, pridať, vymazať alebo presunúť príkaz tak ako potrebujete. Tiež môžete zmeniť príkaz ťuknutím na symbol > ktorý otvorí zoznam príkazov, z ktorého môžete vybrať nejaký iný.

Na precvičenie, urobte drobnú zmenu. Povedzme, že Karel ma postaviť stenu iba vtedy, keď v dolnom rohu nie je značka.

Otvorte procedúru PostavStenu, ťuknite tlačítko Zmeniť, potom tlačitko +, vyberte príkaz Ak a podmienku NieJeZnačka. Teraz presuňte druhý riadok (Opakuj 9x) 

za značku vpravo (tri vodorovné čiary) medzi riadky Ak NieJeZnačka a KoniecAk.

A je to, upravili sme program. Teraz pošlite Karla do rohu, ale bude pokračovať so stavbou múru iba vtedy, ak v rohu nie je položená značka.

Ľahké, nie? Čas na výmenu programov s priateľmi. Poďme na lekciu 4...