﻿<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xml" href="/cjs/examples.screen.xsl" media="screen"?>
<examples chapter="Procvičování 3" directory="procvicovani">

    <!--note>
    </note-->

<!--
  <example>
    <text>
    </text>
    <hint>
    </hint>
    <solution src="procvicovani/03/.py" lang="python" />
  </example>
-->


  <example>
    <text>
        Napište program pro výpis zadaného počtu řádků Pascalova trojúhelníku. Počet řádků si program vyžádá na vstupu od uživatele. Výstup by měl být správně graficky uspořádán. Příklad výstupu pro pět řádek:
        <p>
          <pre>           1
          1 1
         1 2 1
        1 3 3 1
       1 4 6 4 1 </pre>
       </p>
   </text>
    <hint>
        Nevíte-li rovnou, jak řešit uspořádání, vyřešte úlohu nejdříve tak, aby psala správné koeficienty, a teprve poté se zabývejte správným zarovnáním jednotlivých řádek.
    </hint>
  </example>
  
  <example>
    <text>
        Napište program pro vzájemné převody barev z hexadecimálního <b>#rrggbb</b> formátu (kde xx = 00 až ff) do desítkového formátu <b>rgb(RRR, GGG, BBB)</b> (kde XXX = 0 až 255) a poměrového formátu <b>RGB(R, G, B)</b> (kde X = 0.0 až 1.0) a naopak. Vstupní zadání bude čteno z příkazové řádky při volání skriptu. Příklad:
        <p>
            VSTUP: <code>python barva.py "#3465d9"</code><br/>
            VÝSTUP: <code>rgb(52, 101, 217) &amp; RGB(0.204, 0.396, 0.851)</code>
            <br/><br/>
            VSTUP: <code>python barva.py "rgb(0, 0, 255)"</code><br/>
            VÝSTUP: <code>#0000ff &amp; RGB(0, 0, 1)</code>
        </p>
    </text>
    <hint>
        Jednotlivé zápisy mezi sebou tedy rozlišují řetězce <i>#</i> vs <i>rgb()</i> vs <i>RGB()</i>. Dejte si pozor na správný počet míst jednotlivých zápisů!
    </hint>
  </example>
  
  <example>
    <text>
        Python umí nativně zpracovávat celá čísla při nejrůznějších základech – např. <em>dvojkově</em> (prefix <code>0b</code>), <em>osmičkově</em> (prefix <code>0o</code>), <em>desítkově</em> (žádný prefix) nebo <em>šestnáctkově</em> (prefix <code>0x</code>). Zapomeňte na chvíli na vestavěné funkce, které uvedenou konverzi provedou za vás, a napište program, který načte na příkazové řádce libovolný počet řetězců představujících celá čísla v některém z těchto základů a pro každé z nich provede konverzi do zbývajících tří uvedených. Příklad:
      <p>
        VSTUP: <code>python cisla.py 4</code><br/>
        VÝSTUP: <pre>4 =
    0b100
    0o4
    0x4
        </pre>
      <p>
      </p>
        VSTUP: <code>python cisla.py 10 0o66</code><br/>
        VÝSTUP: <pre>10 =
    0b1010
    0o12
    oxa
0o66 =
    0b110110
    54
    0x36
        </pre>
      </p>
      <p>
        <strong>Poznámka:</strong> Ve vašem kódu se tedy nesmí vyskytnout žádná z funkcí <code>bin()</code>, <code>oct()</code>, <code>int()</code> a <code>hex()</code> ^_~
      </p>
    </text>
    <hint>
        Jednotlivé zápisy mezi sebou tedy rozlišuje přítomnost nebo nepřítomnost konkrétního prefixu na prvních dvou místech zpracovávaného řetězce.
    </hint>
  </example>
  
  <example>
    <text>
        Zpracujte vstupní řetězec (ne nutně ze souboru, klidně i z proměnné), který obsahuje několik XML- či HTML-značek. Ze všeho textu v souboru vypište pouze ten mezi značkami, tj. vynechte všechny elementy <em>&lt;element&gt;</em> včetně atributů a <em>&lt;/element&gt;</em>. Přitom postupně plňte následující úkoly:
        <ol>
            <li>použijte smyčku <em>for-in</em></li>
            <li>použijte smyčku <em>while</em></li>
            <li>použijte regexpy</li>
            <li>použijte iterátory</li>
            <li><b>ne</b>použijte ani smyčku <em>for-in</em>, ani smyčku <em>while</em>, ani regexpy, ani iterátory</li>
        </ol>
    </text>
    <hint>
        V posledním případě budete asi potřebovat rekurzi ^_~
    </hint>
  </example>
  
    <example>
        <text>
            Ještě si trochu pohrajeme s odstraňováním značek z předchozího příkladu:
            <ol>
                <li>Přepište vybrané řešení předchozí úlohy do podoby dekorátoru.</li>
                <li>Zparametrizujte tento dekorátor tak, že vyjmenujete seznam značek, které se mají odstranit.</li>
                <li>Zparametrizujte tento dekorátor tak, že vyjmenujete seznam značek, které se <b>ne</b>mají odstranit.</li>
            </ol>
        </text>
        <hint>
            <code>@dekorátor</code> vs <code>@dekorátor('ul', 'li')</code>
        </hint>
    </example>


</examples>
