Dvě věci úvodem

konstantní pole

Používání vhodně pojmenovaných konstant je v mnoha případech velice výhodné, zvyšuje přehlednost kódu a potenciálně šetří mnoho práce při pozdějších úpravách programu. Na cvičení byl předveden způsob jakým lze definovat v programu dokonce celé konstantní pole.

funkce str a val

Při programování často řešíme problém jak načíst vstupní data, případně jak transformovat tato vstupní data pro účely dalšího zpracování programem. Pokud nám jde konkrétně o převádění typu string na typ integer nebo naopak, můžeme využít existující funkce val a str.

rekurze

Na principu rekurze je založen například Ariadnin algoritmus, který znáte z přednášky. Algoritmus lze využít na prohledávání stavového prostoru do hloubky. Na cvičení jsme si ukazovali, jak by to vypadalo v případě Lloydovy skládačky:

M - maximalni pocet kroku
G - stav hry
S - reseni (pole udavajici posloupnost kroku Up,Right,Down,Left)
l - aktualni delka reseni

function solve(var G, var S,l)
  if G je reseni then solve:=true; konec;
 
  if l > M then solve:=false; konec;
  for smer := Up to Left do
    udelejKrok(G,smer);
    S[l]:=smer;
    if solve(G,S,l+1) then solve:=true; konec;
    krokZpet(G,reverse(smer))

Na začátku rekurzivní funkce je test ukončení. Poté následuje cyklus, který z dané pozice vždy zkusí udělat krok jedním směrem a zkusit nový stav vyřešit pomocí rekurzivního volání. Když se to nezdaří, vrátí provedenou změnu zpět a zkusí další možnost. Na cvičení jsme ještě navíc kontrolovali, jestli je daný krok vůbec možný.

Domácí úkol

Není fair-play vykládat prohledávání do hloubky a zadat úlohu, která vyžaduje prohledávání do šířky o kterém zatím bylo řečeno pouze tolik, že existuje. Sebekriticky přiznávám, že jsem to možná vyložil poněkud zmateně - z reakce publika jsem alespoň získal ten dojem. Rekurze je důležité téma, kterému se ještě určitě budeme věnovat.

V CodExu jsem místo skládačky zadal 2 úlohy, které s tématem cvičení nesouvisí: Césarova šifra a Den v týdnu. Každá z nich je za 10 bodů.