[NPRG005] Neprocedurální programování
Zápočet
- aktivní účast na cvičení
- zápočtový program
- zkouška až se zápočtem
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.
- Rozdělit seznam na 5 stejných částí (délkou se liší jen o 1)
- 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.
- Listy stromu bez concatenace
- Quicksort bez concatenace
- Strom - vzdálenost od listů
Motivace k zápočtovému programu
- Chemické značky - anorganická chemie -> názvosloví
- Organické názvosloví -> nakreslit "ty kundičky"
- Generátor permutací - vyrábí grupy symetrických transformací
- Obecný generátor
- Tělocvičné názvosloví - zdroj: Tyrš
- Eliza - automatický odpovídač
- Rekreační matematika - hádanky
- Řízení robotů
- Šachové koncovky
- Hudba
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, []).