- edas
  • Hlavní stránka
  • WEBovský počítadlo
  • Edasova Gimp pejdž
  • Zdrojáky a programy
  • Dost dobrý třídy pro Javu
  • Java SecureFTP
  • unixODBC
  • Karel++
  • Punk
  • Visací Zámek
  • Visací Zámek Revirvál
  • Zajímavý odkazy
  • Fotky
  • Statistika návštěvnosti stránek

  • English

    | Popis prostředí Karel++
    Příklad programu na sčítání
    ========================================
    Příklad programu v jazyce Karel

    Následující příklad ukazuje možnost, jak může Karel sčítat celá oktalová čísla (čísla se základem 8, tedy \0..\07).

    Čísla se zapisují pod sebe zarovnaná vpravo, ostaně jak je obvyklé. Jednotlivé řády čísel jsou tak pod sebou.
    Číslice je reprezentovaná počtem značek umístěných na políčku města. Ve sčítancích je sice možné použít neoktalovou číslici 8 (umístit 8 značek), ale ve výsledku se rozloží do korektního oktalového zápisu (\010).

    Značky mohou být umístěny libovolně po městě, nemusí začínat na horním řádku a cifry nejnižšího řádu nemusí být u pravé zdi.

    Je možné umístit sčítance do VŠECH řádků města, přičemž pokud je sčítanec i na posledním řádku, slouží tento zároveň jako jakýsi "počáteční" výsledek, k němuž se přičítají sčítance z ostatních řádků.
    Všechny sčítance jsou během sčítaní vymazány.

    Předpoklady: město bez zdí, pouze se značkami.

    Výsledek: součet na posledním řádku, vymazané sčítance.

    Příklad: (všechny použíté číslice jsou oktalové)

    
    VSTUP                       VÝSTUP
    +-------------------+      +-------------------+
    |                   |      |                   |
    |                   |      |                   |
    |  4 7 2 8 1        |      |                   |
    |      5 3 6        |      |                   |
    |    5 5 3 5        |      |                   |
    |      2 0 3        |      |                   |
    |                   |      |                   |
    |                   |      |                   |
    |                   |      |                   |
    |        2 0        |      |  5 6 0 1 7        |
    +-------------------+      +-------------------+
    
    Zdrojový kód programu s komentáři

    Poznámka: ne všechny uvedené funkce jsou nezbytné pro sčítání, ponechal jsem je pro úplnost a pro ukázku příkladů nejen pro sčítání.

    #------------------------------------------
    # obecne funkce
    
    # Karel se otoci proti smeru
    CELEM VZAD
      VLEVO VBOK
      VLEVO VBOK
    KONEC
    
    # Karel se otoci smerem na jih
    JIH
      DOKUD NENI JIH
        VLEVO VBOK
      KONEC
    KONEC
    
    # Karel se otoci smerem na sever
    SEVER
      DOKUD NENI SEVER
        VLEVO VBOK
      KONEC
    KONEC
    
    # Karel se otoci smerem na vychod
    VYCHOD
      DOKUD NENI VYCHOD
        VLEVO VBOK
      KONEC
    KONEC
    
    # Karel se otoci smerem na zapad
    ZAPAD
      DOKUD NENI ZAPAD
        VLEVO VBOK
      KONEC
    KONEC
    
    # Karel dojde bezpecne ke zdi
    KE ZDI
      DOKUD NEBUDE ZED
        KROK
      KONEC
    KONEC
    
    # Karel dojde do leveho horniho rohu
    LH ROH
      ZAPAD
      KE ZDI
      SEVER
      KE ZDI
      VYCHOD
    KONEC
    
    # Karel dojde do praveho horniho rohu
    PH ROH
      VYCHOD
      KE ZDI
      SEVER
      KE ZDI
      ZAPAD
    KONEC
    
    # Karel dojde do leveho dolniho rohu
    LD ROH
      ZAPAD
      KE ZDI
      JIH
      KE ZDI
      VYCHOD
    KONEC
    
    # Karel dojde do praveho dolniho rohu
    PD ROH
      VYCHOD
      KE ZDI
      JIH
      KE ZDI
      ZAPAD
    KONEC
    
    # Karel vyprazdni policko, na kterem stoji, od znacek
    VYPRAZDNI
      DOKUD JE ZNACKA
        ZVEDNI
      KONEC
    KONEC
    
    # Karel vyprazdni radek nebo sloupec od soucasne pozice
    # ke zdi. Funkce se vola rekurzivne kvuli tomu, aby se
    # Karel dokazal vratit na puvodni misto. Pokud by se
    # pouzila podminka DOKUD NEBUDE ZED, tak by se Karel
    # nedokazal vratit.
    # Takhle vyprazdni policko, pokud neni zed, udela krok
    # a rekurzivne opet provede VYPRAZDNI KE ZDI. Potom zase
    # udela krok, ovsem to je uz krok zpet, protoze po navratu
    # z rekurze jde Karel opacnym smerem. Otoceni se zaruci v
    # posledni urovni rekurze, kdy Karel stoji pred zdi.
    VYPRAZDNI KE ZDI
      VYPRAZDNI
      KDYZ NEBUDE ZED
        KROK
        VYPRAZDNI KE ZDI
        KROK
      KONEC JINAK
        CELEM VZAD
      KONEC
    KONEC
    
    # Vyprazdni cely radek (nebo sloupec), zavola dvakrat
    # VYPRAZDNI KE ZDI, po navratu z prvniho volani stoji
    # Karel v opacnem smeru, nez byl na zacatku, takze
    # druhe volani je mozne okamzite. Po jeho skonceni
    # stoji Karel opet v uplne puvodnim smeru.
    VYPRAZDNI RADEK
      OPAKUJ 2 KRAT
        VYPRAZDNI KE ZDI
      KONEC
    KONEC
    
    #-----------------------------------------------------------
    # funkce pro scitani cisel
    
    # Karel pricte k aktualni cifre vysledku jednu znacku.
    # Pokud by melo dojit k preteceni radu, tak vynuluje
    # (vyprazdni) aktualni cifru vysledku a zvysi cifru
    # vyssiho radu vysledku.
    PRICTI JEDNU
      KDYZ NENI 7
        POLOZ
      KONEC JINAK
        VYPRAZDNI
        PRETEC RAD
      KONEC
    KONEC
    
    # Karel udela krok na cifru vyssiho radu a zvetsi ji o
    # jednu znacku tim, ze zavola PRICTI JEDNU, cimz se zaruci
    # pripadne preteceni i tohoto radu. Pak se vrati zpet na
    # nizsi rad.
    PRETEC RAD
      ZAPAD
      KROK
      PRICTI JEDNU
      VYCHOD
      KROK
    KONEC
    
    # Karel pricte jednu znacku z cifry scitance k prislusne
    # cifre vysledku.
    # Volani je opet rekurzivni z toho duvodu, aby se Karel
    # vratil na cifru scitance. Karek jde na jih, dokud
    # nedojde ke zdi. Tam pricte jednu znacku k cifre vysledku
    # otoci se na sever a vraci se v rekurzi zpet.
    ZVETSI VYSLEDEK
      JIH
      KDYZ NEBUDE ZED
        KROK
        ZVETSI VYSLEDEK
        KROK
      KONEC JINAK
        PRICTI JEDNU
        SEVER
      KONEC
    KONEC
    
    # Karel pricte celou cifru scitance k vysledku.
    # Pricteni se provede prictenim vsech znacek. Po pricteni
    # jedne znacky se ze scitance jedna znacka zvedne, cimz
    # se sice postupne maze scitanec, ale zajisti se tim
    # ukonceni pricitani cifry.
    PRICTI CIFRU
      DOKUD JE ZNACKA
        ZVETSI VYSLEDEK
        ZVEDNI
      KONEC
    KONEC
    
    # Karel secte cifry stejneho radu vsech scitancu (cifry pod
    # sebou) do vysledku.
    # Volani se opet provadi rekurzivne, aby se Karel po secteni
    # cifer vratil na puvodni misto (tj. na pozici v prvnim
    # (hornim) scitanci).
    # Jde se od zhora, Karel se otoci na jih, zjisti zda nestoji
    # na vysledku (ten je v poslednim radku, tedy u zdi). Pokud
    # nestoji u zdi, stoji na scitanci a pricte jeho cifru, udela
    # krok na jih a vstoupi do rekurze. Jakmile je u zdi, stoji na
    # vysledku, otoci se na sever a jde navratem z rekurze zpet na
    # prvni scitanec.
    SECTI CIFRY
      JIH
      KDYZ NEBUDE ZED
        PRICTI CIFRU
        JIH
        KROK
        SECTI CIFRY
        KROK
      KONEC JINAK
        SEVER
      KONEC
    KONEC
    
    # Karel secte cela cisla, tim ze secte jejich cifry.
    # Nejdriv Karel secte cifry jednoho radu do vysledku,
    # otoci se k vyssimu radu (zapad) a zjisti, zda uz neni
    # na nejvyssim radu (u zdi). Pokud ne, tak postoupi na
    # vyssi rad a zavola se rekurzivne k secteni vyssich
    # radu.
    # Po dojiti na nejvyssi rad se rekurze ukonci, na jejim
    # konci je mozno Karla otocit a navratem v rekurzi ho
    # dostat zpet na vychozi pozici.
    # Nebo je mozno misto KDYZ NEBUDE ZED pouzit
    # DOKUD NEBUDE ZED ; KROK ; SECTI CIFRY ; KONEC, cimz
    # se nebude volat rekurzivne, a ztrati se moznost navratu.
    SECTI CISLA
      SECTI CIFRY
      ZAPAD
      KDYZ NEBUDE ZED
        KROK
        SECTI CISLA
      KONEC JINAK
      KONEC
    KONEC
    
    # Karel dojde do praveho horniho rohu mesta a odtud zacne
    # hledat cifru nejnizsiho radu prvniho scitance.
    SECTI
      PH ROH
      SECTI CISLA
    KONEC
    
    
    
    ========================================
    <font size=-1 color=#39BCBA><b> Stránky jsou optimalizovaný pro jakýkoliv rozlišení (i pro 640x480) a pro jakejkoliv prohlížeč (i pro textovej Lynx).
    Připomínky mi pište e-mailem na adresu martin.edlman@gmail.com

    Naposledy upravováno: 07.11.2009
    FreeBSD Apache gfx by Gimp Netscape </b></font>

    Martin 'Edas' Edlman, martin.edlman@gmail.com