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ů.