Ciele

  1. Naučiť sa vetviť tok programu na základe podmienok.
  2. Naučiť sa používať v programoch logické cykly.
  3. Osvojiť si príkazy break a continue pre riadenie behu cyklov.

Úvod

Na tomto cvičení sa zoznamíte so senzormi, ktorými vybavil robota Karla jeho výrobca. Na základe ich hodnôt naučíte Karla rozhodovať sa a vetviť jeho program.

Postup

Krok č. 1: Karel opravuje cestu

Úloha 1.1:

Otvorte si riešenie doplňujúcej úlohy č. 2 z minulého cvičenia alebo ho nájdite v prílohe riešení ako súbor road.c. Pôvodná cesta, ktorú mal Karel vyplniť, sa nachádza v súbore sveta road.kw, ktorý by ste už z minulého cvičenia mali mať vytvorený.

Úloha 1.2:

Upravte program tak, aby Karel vedel vyplniť vždy všetky diery nezávisle na ich množstve až do konca cesty.
Pre úspešné vyriešenie tejto úlohy môžete využiť tieto Karlove senzory:
  • frontIsClear() - Vracia hodnotu 1, ak sa pred Karlom nenachádza stena. V opačnom prípade vracia hodnotu 0.
  • frontIsBlocked() - Vracia hodnotu 1, ak sa pred Karlom nachádza stena. V opačnom prípade vracia hodnotu 0.
  • rightIsClear() - Vracia hodnotu 1, ak sa vpravo od Karla nenachádza stena. V opačnom prípade vracia hodnotu 0.
  • rightIsBlocked() - Vracia hodnotu 1, ak sa vpravo od Karla nachádza stena. V opačnom prípade vracia hodnotu 0.
Svoje riešenie tejto úlohy môžete otestovať na svetoch road2.kw a road3.kw, ktoré nájdete v prílohe v zozname svetov.

Úloha 1.3:

Upravte program tak, aby Karel počas plátania dier na ceste vedúcej do areálu Technickej univerzity nevypĺňal aj tie diery, ktoré už sú vyplnené.
Pre úspešné vyriešenie tejto úlohy môžete využiť tieto Karlove senzory:
  • beepersPresent() - Vracia hodnotu 1, ak Karel stojí na rohu, na ktorom sa nachádza značka. V opačnom prípade vracia hodnotu 0.
  • noBeepersPresent() - Vracia hodnotu 1, ak Karel stojí na rohu, na ktorom sa nenachádza značka. V opačnom prípade vracia hodnotu 0.
Svoje riešenie tejto úlohy môžete otestovať na svetoch road4.kw a road5.kw, ktoré nájdete v prílohe v zozname svetov.

Krok č. 2: Robolympiáda

V tomto kroku pomôžete Karlovi zúčastniť sa a uspieť v olympiáde pre robotov. Jednou z disciplín, ktorej sa je možné v rámci olympiády zúčastniť, je prekážkový beh. Napíšete preto pre Karla program, pomocou ktorého zvládne zdolať akúkoľvek prekážkovú trať, ktorú orgranizátori pre účastníkov olympiády pripravia. Karel bude vždy štartovať z pozície [1,1].

Úloha 2.1:

Otvorte si riešenie doplňujúcej úlohy č. 1 z minulého cvičenia alebo ho nájdite v prílohe riešení ako súbor olympics.c. Tréningová prekážková trať sa nachádza v súbore sveta training.kw, ktorý by ste už z minulého cvičenia mali mať vytvorený.
Počiatočná situácia:
 0
 CORNER  FACING  BEEP-BAG  BEEP-CORNER
 (1, 1)   EAST       0         0
ST.+-------------------+
 2 | .   .   .   .   . |
   |   |   |   |   |   |
 1 | > | . | . | . | . |
   +-------------------+
     1   2   3   4   5   AVE.
Koncová situácia:
 44
 CORNER  FACING  BEEP-BAG  BEEP-CORNER
 (5, 1)   EAST       0         0
ST.+-------------------+
 2 | .   .   .   .   . |
   |   |   |   |   |   |
 1 | . | . | . | . | > |
   +-------------------+
     1   2   3   4   5   AVE.

Úloha 2.2:

Upravte program tak, aby sa Karel zastavil v behu vtedy, keď nájde značku, pričom značka sa v Karlovej ceste bude vždy nachádzať.
Svoje riešenie tejto úlohy si môžete otestovať na prekážkovej dráhe olympics1.kw, ktorú nájdete v prílohe v zozname svetov.

Úloha 2.3:

Upravte program tak, aby Karel zvládol prebehnúť ľubovoľný počet prekážok, ktoré môžu byť od seba ľubovoľne vzdialené. Karel svoj beh zastaví vtedy, keď vo svojej trati natrafí na značku, pričom značka sa bude v Karlovej ceste vždy nachádzať.
Svoje riešenie tejto úlohy si môžete otestovať na prekážkovej dráhe olympics2.kw, ktorú nájdete v prílohe v zozname svetov.

Doplňujúce úlohy

  1. Vytvorte pre Karla program, pomocou ktorého premení aktuálny prázdny svet na šachovnicu. Svet má vždy párny počet políčok. Pre otestovanie tejto úlohy použite súbory svetov empty1.kw a empty2.kw.
    Počiatočná situácia:
     0
     CORNER  FACING  BEEP-BAG  BEEP-CORNER
     (1, 1)   EAST      99         0
    ST.+-----------------------+
     4 | .   .   .   .   .   . |
       |                       |
     3 | .   .   .   .   .   . |
       |                       |
     2 | .   .   .   .   .   . |
       |                       |
     1 | >   .   .   .   .   . |
       +-----------------------+
         1   2   3   4   5   6   AVE.
    Koncová situácia:
     48
     CORNER  FACING  BEEP-BAG  BEEP-CORNER
     (1, 6)   NORTH     87         1
    ST.+-----------------------+
     4 | ^   .   1   .   1   . |
       |                       |
     3 | .   1   .   1   .   1 |
       |                       |
     2 | 1   .   1   .   1   . |
       |                       |
     1 | .   1   .   1   .   1 |
       +-----------------------+
         1   2   3   4   5   6   AVE.
  2. Vytvorte program pre robota Karla, pomocou ktorého Karel zozbiera všetky značky, ktoré sa v ňom nachádzajú. Karel ich všetky umiestni v juhovýchodnom rohu miestnosti a sám sa nakoniec presunie na juhozápadnú pozíciu. Pre otestovanie tejto úlohy použite súbory svetov collector1.kw a collector2.kw.
    Počiatočná situácia:
     0
     CORNER  FACING  BEEP-BAG  BEEP-CORNER
     (1, 1)   EAST       0         0
    ST.+-------------------+
     5 | .   2   .   .   . |
       |                   |
     4 | .   .   .   .   . |
       |                   |
     3 | .   .   .   .   2 |
       |                   |
     2 | .   .   1   .   . |
       |                   |
     1 | >   .   .   3   . |
       +-------------------+
         1   2   3   4   5   AVE.
    Koncová situácia:
     70
     CORNER  FACING  BEEP-BAG  BEEP-CORNER
     (1, 1)   WEST       0         0
    ST.+-------------------+
     5 | .   .   .   .   . |
       |                   |
     4 | .   .   .   .   . |
       |                   |
     3 | .   .   .   .   . |
       |                   |
     2 | .   .   .   .   . |
       |                   |
     1 | <   .   .   .   8 |
       +-------------------+
         1   2   3   4   5   AVE.