[NPRG005] Neprocedurální programování

Zápočet

Kontaky ke cvičení

Tel: "pro zobrazení zapněte javascript"
E-mail: "pro zobrazení zapněte javascript"

Domácí úkoly

Cvičení 1 – 24.2.2016

Zadání:
rodina(Otec, Matka, Fakani) % kde Fakani je seznam dětí od nejstaršího k nejmladšímu
%muz(Kdo)
%zena(Kdo)
býti_starším_bratrem(Kdo, Koho)
býti_nejstarším_bratrem(Kdo, Koho)
mladší_bratr(Br, Koho)
bratři(Br, Koho)
Řešení
%first_member(Kdo, Kde)
fm(X, [X|_])
%last_member(Co, Čeho)
lm(X, [X])
lm(X, [_|Y]) :- lm(X,Y)

Cvičení 3 – 9.3.2016

Zadání:
    Poslat mailem ("pro zobrazení zapněte javascript") v příloze pod vlastním jménem do úterý ráno.
  1. Rozdělit seznam na 5 stejných částí (délkou se liší jen o 1)
  2. Otočit matici o 90°

Cvičení 4 – 16.3.2016

Zadání:
    Poslat mailem ("pro zobrazení zapněte javascript") v příloze pod vlastním jménem do úterý ráno.
  1. Listy stromu bez concatenace
  2. Quicksort bez concatenace
  3. Strom - vzdálenost od listů

Motivace k zápočtovému programu

KrylJokes

Představ si, že bys byl knoflík na Krylově košili... To bych byl dost napjatej!
%nta_mocnina(+Mocnina, +VstupniPermutace, -VystupniPermutace)
%presun(Cyklus, Misto, Vysledek)
presun([A|Ocas], 0, A).
presun([A|Ocas], N, V):- N1 is N-1, presun(Ocas, N1, V).
%posun(Cyklus, Misto, Posun, Vysledek)
posun(c(N, SC), M, P, d(M, V)) :- D is M + P, N1 is mod(D, N), presun(c(N, SC), N1, V).
%A is mod(Co, Cim)
%mocn(+Mocnina, +VstupniPermutace, -VystupniPermutace)
%mocn(0, c(N, _), c(N, [])).
%mocn(1, A, A).
mocn(M, A, B) :- mocn0(M, A, [], B).
mocn0(M, c(N, [Hlava | Ocas]), [A | B], Vysledek ) :- mocnina0(M, Hlava, A), mocn0(M, c(N, Ocas), B, Vysledek).
mocn0(_, c(_, []), A, A).
%mocnina(Mocnina, Perm, SPerm)
mocnina(M, SC, V ) :- N is lenght(SC), M1 is mod (M, N), mocnina2(M1, SC, SC, V).
%mocnina0(Mocnina, Perm, SPerm)
mocnina0(Mocnina, Perm, SPerm) :- mocnina(Mocnina, Perm, D), d2c(D, SPerm).
%mocnina2(Mocnina, Permutace, RoztrhanySeznam, VysledekVD)
mocnina2(M, Cely, [], []).
mocnina2(M, Cely, [Hlava|Ocas], V):- posun(Cely, Hlava, M, V1), mocnina2(M, Cely, Ocas, [V1| V]).
%d2c(D, C, VyskrtD)
d2c(_, _,[]).
d2c(D, [Hlava|C], VyskrtD) :- cykl(D, Hlava, VyskrtD), d2c(VyskrtD, [Hlava|C], _).
%cykl(D, Cyklus, VyskrtD)
%cykl0(D, Ukonc, Cyklus, VyskrtD)
cykl([d(A, B)| Ocas], Cyklus, VyskrtD) :- cykl0([d(A, B)| Ocas], A, Cyklus, VyskrtD).
cykl0([d(_, A)| _], A, _, _).
cykl0([d(A, B)| Ocas], A, [HlavaCyklu|Cyklus], [Zacatek|Konec]) :-  next(Ocas, B, HlavaCyklu , Zacatek, Konec).
%next(+D, +Prvni, -Druhy, -Zacatek, -Konec)
next([d(A, B)| Ocas], A, B, [], Ocas).
next([Hlava| Ocas], Prvni, Druhy, Zacatek, Ocas) :- next(Ocas, Prvni, Druhy, [Hlava|Zacatek] , Ocas).
next([], A, A, A, []).

Poslední aktualizace: 30. 03. 2016 14:26:18 CEST