Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- % -----------------------------------------------------------
- /*
- 1) Napiste predikat vydel(Sez1, Sez2), ktery vydeli Sez1 (seznam celych sudych cisel)
- celociselne 2ma. Tj. napr. vydel([6,8,4],X) - vysledek X=[3,4,2].
- */
- vydel([], []).
- vydel([H|T], [A|Vysl]) :- A is H / 2, vydel(T, Vysl).
- % -----------------------------------------------------------
- /*
- 2) Napiste program, ktery pocita obvod ctverce, dokud uzivatel nezada 'konec'.
- */
- ctverec:-repeat,
- write('Zadej cislo:'),
- read(X),
- (X='konec',!;
- O is X * 4, write('Obvod je '), write(O)),nl,fail.
- % -----------------------------------------------------------
- /*
- 3) Napiste predikat porovnej(Sez1, Sez2), ktery porovna delku obou seznamu
- a vypise, ktery z nich je delsi.
- Napr. porovnej([2, ahoj, cisla, 8],[5,5,ahoj,77,windows,blbost])
- napise: 'Druhy seznam je delsi'.
- */
- delka([], 0).
- delka([_|T], V) :- delka(T, D), V is D + 1.
- porovnej(X, Y) :- delka(X, D1), delka(Y, D2), ktery(D1, D2).
- ktery(D1, D2) :- D1 < D2, write('prvni seznam je mensi nez druhy'),nl.
- ktery(D1, D2) :- D1 > D2, write('prvni seznam je vetsi nez druhy'),nl.
- ktery(D1, D2) :- D1 = D2, write('seznamy jsou stejne dlouhe'),nl.
- % -----------------------------------------------------------
- /*
- 4) Napiste predikat, jimz prictete ke vsem prvkum seznamu dane cislo X.
- Tj. pokud zavolate napriklad ?- pricti(5,[1,3,2],V).
- dostanete odpoved V = [6,8,7]
- */
- pricti(X,[],[]).
- pricti(X,[H|T],[A|V]):-A is X+H,pricti(X,T,V).
- %%% PO VYSLEDKU VRACI NO !!!!!!!!!!!!!!!!
- % -----------------------------------------------------------
- /*
- 5) Napiste program, ktery bude pracovat v cyklu a bude pocitat obvody kruhu
- vzdy zada polomer/prumer kruhu, program program vypise obvod a vyzada si
- dalsi vstup. Pri zadani slova "konec" program zkonci.
- */
- obvod:-repeat,
- write('zadej polomer kruhu v metrech, nebo ukonci slovem konec'),nl,
- read(X),
- (X='konec'; % NEBO (X='konec',!; oboje funguje
- O is (3.14*2*X),write('obvod kruhu je '),write(O),write('metru'),nl,fail).
- % -----------------------------------------------------------
- /*
- 6) Napiste pravidlo, ktere overi, jestli je seznam usporadan sestupne. Priklad:
- ?- poradi([7,4,9,3,2,1]). ... dostanete odpoved "no"
- ?- poradi([6,4,2,1]). ... dostanete odpoved "yes"
- */
- poradi([_]).
- poradi([H,H1|T]):-H>H1,poradi([H1|T]).
- % -----------------------------------------------------------
- /*
- 7) Ze seznamu odstrante prvni a posledni prvek.
- */
- %%% DOPLNIT !!!!!!!!!!!!!!!!
- % -----------------------------------------------------------
- /*
- 8) Do databaze vlozte sestupne N cisel.
- */
- vlozv(X).
- vlozv(X):-N>0,asserta(cislo(0)),N1 is N-1,vlozv(N1).
- %%% NEFUNGUJE !!!!!!!!!!!!!!!!
- % -----------------------------------------------------------
- /*
- 9) V databazi mame ulozenačcisla ve tvaru cislo(1) az cislo(...),
- odstrante takove, ktera je mensi nez uzivatelem zadane cislo.
- */
- % - napoveda - http://iris.uhk.cz/logpro/teorie/teorie10.html
- % -----------------------------------------------------------
- /*
- 10) Spocita druhou mocninu zadaneho cisla v rozsahu 100 az 200
- */
- cislo100az200(X):-repeat,write('Zadej cislo v rozmezi 100-200'),nl,read(X),X>=100,X=<200,!.
- nasob:-cislo100az200(X),N is X*X,write('Druha mocnina '),write(X),write(' je '),write(N),nl.
- % -----------------------------------------------------------
- /*
- 11) Zadej cislo v rozsahu 100 az 200
- */
- vstup(X):-repeat,write('Zadej cislo v rozmezi 100-200'),nl,read(X),X>=100,X=<200,!.
- % -----------------------------------------------------------
- /*
- 11) Prunik, sjednoceni a rozdil
- %?- prunik([1,2,3,4,5],[2,8,4,6],V). V = [2,4]
- %?- sjednoceni([1,2,3,4],[2,3,4,5],V). V = [1,2,3,4,5]
- %?- rozdil([1,2,3,4],[1,3,5,2],V).
- */
- clen(X,[X|T]).
- clen(X,[H|T]):-clen(X,T).
- prunik([],_,[]).
- prunik([H|A],B,[H|V]):-clen(H,B),!,prunik(A,B,V).
- prunik([H|A],B,V):-prunik(A,B,V).
- sjednoceni([],B,B).
- sjednoceni([H|A],B,[H|V]):-not(clen(H,B)),!,sjednoceni(A,B,V).
- sjednoceni([H|A],B,V):-sjednoceni(A,B,V).
- %rozdil A-B
- rozdil([],_,[]).
- rozdil([H|A],B,[H|V]):-not(clen(H,B)),rozdil(A,B,B).
- rozdil([H|A],B,V):-clen(H,B),rozdil(A,B,V).
- %%% NEFUNGUJE !!!!!!!!!!!!!!!!
- % -----------------------------------------------------------
- /*
- 12) Histogram. %?-his([3,2,5,1]).
- */
- his([]).
- his([H|T]):-vypis(H),nl,his(T).
- vypis(0):-!. %prikaz rezu (misto podminek)
- vypis(H):-write('*'),H1 is H-1,vypis(H1).
- % -----------------------------------------------------------
- /*
- 13) Vytikani cisel:
- ?- smazej(2,[1,2,3,4,5],V).
- V = [2,3,4,5] ;
- V = [3,4,5] ;
- */
- smazej(X,[],[]).
- smazej(X,[H|T],T).
- smazej(X,[H|T],V):-X\=H,smazej(X,T,V).
- %?-smazej(2,[1,2,3,4,5],V).
- % -----------------------------------------------------------
- /*
- 14) Posledni a predposledni cislo v seznamu:
- ?- predposledni([1,2,3,4,5],V).
- V = 4 ;
- ?- posledni(V,[1,2,3]).
- V = 3 ;
- */
- predposledni([P,X],P).
- predposledni([H|T],P):-predposledni(T,P).
- posledni(X,[X]).
- posledni(X,[H|T]):-posledni(X,T).
- %%% PO VYSLEDKU VRACI NO !!!!!!!!!!!!!!!!
- % -----------------------------------------------------------
- /*
- 15) Delka seznamu, vypis kladnych cisel, vypis n-teho prvku,
- spojeni 2 seznamu
- */
- clen(X,[X|_]).
- clen(X,[H|T]):-clen(X,T).
- vypis([]).
- vypis([H|T]):-write(H),nl,vypis(T).
- nty(1,[H|T],H). %n-ty prvek
- nty(N,[H|T],V):-N>1,N is N-1,nty(N1,T,V).
- kladna([]):-write('Seznam obsahuje pouze kladna cisla'),nl.
- kladna([H|T]):-H>0,kladna(T).
- kladna([H|T]):-H=<0,write('Seznam obsahuje i nekladna cisla'),nl.
- % ?- ?- kladna([1,-2,3]).
- delka([],0).
- delka([H|T],P):-delka(T,P1),P is P1+1.
- % ?- delka([1,2,3,4,5],V).
- % V = 5
- spoj([],S,S).
- spoj([H|T],S,[H|V]):-spoj(T,S,V).
- % ?- spoj([1,2,3],[4,5,6],V).
- % V = [1,2,3,4,5,6]
- % -----------------------------------------------------------
Advertisement
Add Comment
Please, Sign In to add comment