Kryl 28.5.2013

LordG at 2013-05-28 17:29:12

První část

HASKELL

  1. Řídká matice, reprezentovaná jako (m, n, s), kde:
    m = počet řádek
    n = počet sloupců
    s = seznam trojic (i,j,a<sub>i,j</sub>), kde i,j je klasický index v matici a a<sub>i,j</sub> je nenulová hodnota.

Úkol: naprogramovat transpozici a násobení takto reprezentovaných matic.

  1. Definovat přirozenou reprezentaci binárního stromu, v jehož uzlech je uložen typ třídy Ord, a naprogramovat fci, která z BVS této reprezentace vypustí uzly, jejichž hodnoty nepatří do zadaného intervalu.

PROLOG
3) Permutace je zadaná jako c(Cislo, Cykly), kde Cislo je počet permutovaných čísel a cykly je seznam cyklů permutace s tím, že prvky, které permutace zobrazí na ně samotné, tam nejsou. Naprogramovat složení takto reprezentovaných permutací tak, aby výsledná reprezentace byla také taková.

  1. Sestavit predikát taut(Formule), který ověří, jestli formule je tautologií.
    K tomu navíc definovat unární operátor ~ pro negaci a binární &, # pro konjunkci a disjunkci. Formule je potom zadaná pomocí těchto operátorů a atomů (klasika, zapsané malými písmeny, např ~a#b&a.

DRUHÁ ČÁST

Máme dětskou tiskárnu. V té je daný počet nul, jedniček, ..., devítek. Úkoly:

  1. Napsat fci, která zjistí, jestli lze číslo N složit.

  2. Napsat fci, která k zadanému N spočítá - pokud ho lze reprezentovat - jeho pořadí podle velikosti mezi reprezentovanými čísly.

  3. Napsat fci, která pro dané P spočítá P-té nejvyšší reprezentovatelné číslo.

Komentář: číslo N mohlo být v rozsahu Int, tzn pokud by v řešení tento fakt pomohl, bylo lze toho využít.
Komentář 2: Já zvolil inkrementální počítání odspoda, tzn počítal jsem pořadí N od nejmenšího a P-té nejnižší reprezentovatelné číslo.... A zítra jdu na ústní, tak uvidíme.