﻿<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xml" href="/cjs/examples.screen.xsl" media="screen"?>
<examples chapter="Podmínky" directory="podminky">

<!--
  <example>
    <text>
    </text>
    <hint>
    </hint>
    <solution src="podminky/.k99" lang="karel" />
  </example>
-->
<!--
  „“–
  ←→ ↑↓ ↔↕
  ↵ aneb &#x21B5; aneb \r aneb CR aneb CarriageReturn
-->


  <example>
    <text>
        Naučte Karla <code>DVOJKROK?</code>, tj. dvojkrok s podmínkou – Karel udělá dva kroky pouze tehdy, nenabourá-li při nich do zdi. (Podle svého postavení ve městě tak Karel může udělat kroky buď dva, nebo pouze jeden, nebo také vůbec žádný.)
    </text>
    <solution src="podminky/01.k99" lang="karel" />
  </example>

  <example>
    <text>
        Za předpokladu, že Karel před vykonáváním příkazu stojí u zdi, otočte ho k ní levým, resp. pravým bokem.
    </text>
    <solution src="podminky/02.k99" lang="karel" />
  </example>

  <example>
    <text>
        Naučte Karla bezpečně couvnout o jedno políčko dozadu (příkaz nazvěte např. <code>COUVNI?</code> nebo <code>ÚKROK VZAD?</code>). Po vykonání příkazu se Karel bude dívat stejným směrem jako na začátku a pokud za ním na začátku byla zeď, zůstane stát na místě.
    </text>
    <solution src="podminky/03.k99" lang="karel" />
  </example>

  <example>
    <text>
        Podobným způsobem jako v předchozím příkladě naučte Karla bezpečně ukročit doleva, resp. doprava. Karel se opět bude dívat stále stejným směrem a provede úkrok pouze tehdy, pokud při něm nenabourá do zdi.
    </text>
    <solution src="podminky/04.k99" lang="karel" />
  </example>

  <example>
    <text>
        Ještě jednou na stejné brdo – dojděte s Karlem bezpečně (tj. nebourejte do stěny) o jedno políčko dále, ale tentokrát po úhlopříčce (tj. čtyři různé příkazy pro čtyři různé směry).
    </text>
    <hint>
      Uvědomte si, že po úhlopříčce můžete jít dvěma různými způsoby – např. šikmo doprava nahoru znamená buď nejdřív rovně a potom doprava, nebo nejdřív doprava a potom doleva nahoru. Úkolem této úlohy je ošetřit, že pokud není kvůli zdi možné jeden z těchto způsobů realizovat, pokusí se Karel ještě i o ten druhý.
    </hint>
  </example>

  <example>
    <text>
        Dojděte s Karlem po úhlopříčce doprava nahoru („po schodech“) ke zdi. Jak nejsnáze vyřešíte chůzi ve zbývajích třech dalších směrech?
    </text>
    <hint>
      V tomto případě uvažujte prázdné město, zeď na cestě by z algoritmu s podmínkou a opakováním udělala moloch o spoustě dalších podmínek.
    </hint>
    <!--solution src="podminky/06.k99" lang="karel" /-->
  </example>

  <example>
    <text>
        Naučte Karla položit značku za sebe, je-li to možné (to znamená není-li tam zeď a políčko není už plné značek). Po provedení příkazu bude Karel stát na stejném poli a dívat se stejným směrem jako na začátku.
    </text>
    <solution src="podminky/07.k99" lang="karel" />
  </example>

  <example>
    <text>
        Naučte Karla opačný příkaz – ať se pokusí z pole za sebou sebrat značku. Zbývající podmínky jsou obdobné, jako u předchozího příkladu.
    </text>
    <solution src="podminky/08.k99" lang="karel" />
  </example>

  <example>
    <text>
        Vyražte s Karlem směrem, kterým je otočený, a zastavte se na nejbližší značce. (Správně byste se měli zastavit také na zdi, ale to chce buď rekurzi nebo podmínku <code>NEŽ</code>.)
    </text>
    <solution src="podminky/09.k99" lang="karel" />
  </example>

  <example>
    <text>
        Projdi řadu, resp. sloupec, směrem, kterým Karel stojí, a přitom:
        <ul>
          <li>na místě se značkou značku odeber</li>
          <li>na prázdné místo značku polož</li>
        </ul>
        (Nezapomeňte ošetřit chování na krajních polích.) 
    </text>
    <solution src="podminky/10.k99" lang="karel" />
  </example>

  <example>
    <text>
        Naučte Karla příkaz <code>K SEVERNÍ ZDI</code> (a podobně i tři zbývající), tj. přesuňte Karla k nejbližší zdi v daném světovém směru. Po provedení příkazu bude Karel stát čelem ke zdi, ke které došel. (Přítomnost zdí by to pěkně zkomplikovala, tak je neuvažujte.)
    </text>
    <hint>
      Pro prázdné město je princip řešení jednoduchý – otočit Karla do příslušného směru a následně s ním jednoduše dojít ke zdi. Zdi v cestě to dosti komplikují, protože Karel je musí obejít, a to se mu také nemusí podařit úplně jednoduše.
    </hint>
    <solution src="podminky/11.k99" lang="karel" />
  </example>

  <example>
    <text>
        Za předpokladu prázdného města ve výchozím postavení (tj. s domovem vlevo dole) doveďte Karla domů z libovolného místa ve městě.
    </text>
    <hint>
      Jelikož město je podle zadání prázdné, nejsnažší je dovést Karla nejdříve k jižní nebo západní zdi, a potom už přímo do levého spodního rohu.
    </hint>
  </example>

  <example>
    <text>
        Nechť je na začátku Karel na libovolném políčku v prázdném městě natočený libovolným směrem. Nechť je domov umístěn na libovolném políčku ve městě. Dojděte s Karlem do domu.
    </text>
    <hint>
      Asi úplně nejjednodušší je nejdříve dojít s Karlem do nějakého standardního startovního bodu, např. levého spodního rohu, a odtud systematicky prohledat město řádku po řádce, resp. sloupec po sloupci. Samozřejmě se může stát, že při přesunu Karla na „start“ s ním projdete přes <em>domov</em>. Nebo dokonce Karel už může na začátku úlohy být <em>doma</em> ^_^ Jak tohle ošetříte, je na vás.
    </hint>
  </example>

  <example>
    <text>
        Dojděte s Karlem na první pole, kde je víc než jedna značka.
    </text>
    <hint>
      Zjevně potřebujete tam, kde Karel natrefí na značku, zkoušet zvednout i druhou, zarazit se při úspěchu, ale zároveň na konci ponechat značky v původním stavu.
    </hint>
    <!--solution src="podminky/14.k99" lang="karel" /-->
    <solution src="podminky/14_a.k99" lang="karel" />
  </example>


</examples>
