Bài tập thực hành BProlog

1. Viết vị từde mc h an đếm trên một danh sách có bao nhiêu phần tử là số chẵn.
Vd: demchan([4,9,6,5,2],N) N=3
demchan([],0):-!.
demchan([H|T],S):-(H mod 2) =:= 0,demchan(T,S1),S is S1+1,!.
demchan([_|T],S):-demchan(T,S).
2. Viết vị từptn nhận đối số là một danh sách cùng số nguyên dương n và in ra phần tử thứ n
trong danh sách.
Vd: ptn([4,9,6,5,2],2,X)  X=9
dem([],0):-!.
dem([_|T],N):-dem(T,N1),N is N1+1,!.
ptn([X|_],1,X):-!.
ptn([_|Y],M,Z):-M1 is M-1,ptn(Y,M1,Z),!.
3. Viết vị từn_ pt da u(N,L,L1,L2) trong đ L1 chứa N phần tử đầu của Lvà L2 chứa phần còn
lại. Vị từ này có thể đảo ngược lại.
Vd: n_ptdau(3,[1,2,3,4,9,5,6],L1,L2) L1=[1,2,3], L2=[4,9,5,6]
n_ptdau(N,[a,b,c],[a,b],L2) N=2, L2=[c]
n_ptdau(0,L,[],L).
n_ptdau(N,[H|T],[H|T1],L2):-n_ptdau(M,T,T1,L2),N is M+1.
4. Viết vị từpt g in ra phần tử giữa trong danh sách số nguyên dương, trả về 0 nếu số phần tử
của danh sách là số chẵn.
Vd: ptg([4,9,6,5,2],X)  X=6
ptg([4,9,5,2],X)  X=0
dem([],0):-!.
dem([_|T],N):-dem(T,N1),N is N1+1,!.
ptn([X|_],1,X):-!.
ptn([_|Y],M,Z):-M1 is M-1,ptn(Y,M1,Z),!.
ptg([A|B],C):-dem([A|B],K),(K mod 2) =:= 1,K1 is K/<2,K2 is
K1+1,ptn([A|B],K2,C),!.
ptg([A|B],0):-dem([A|B],K),(K mod 2) =:= 0,!.
5. Viết vị từho i,h ie u,g iao thực hiện phép hội, hiệu và giao trên hai danh sách
Vd: hoi([1,2,3,4,5],[3,4,5,6,7,8],X) X=[1,2,3,4,5,6,7,8]
hieu([1,2,3,4,5],[3,4,5,6,7,8],X)  X=[1,2]
giao([1,2,3,4,5],[3,4,5,6,7,8],X)  X=[3,4,5]
tim([H|_],H):-!.
tim([_|T],X):-tim(T,X).
hoi([],X,X):-!.
hoi([H|T],X,[H|T1]):-not(tim(X,H)),hoi(T,X,T1),!.
hoi([_|T],X,T1):-hoi(T,X,T1).
Vd: dao([1,2,3,4,5],L) L=[5,4,3,2,1]
tim([H|_],H):-!.
tim([_|T],X):-tim(T,X).
giao([],_,[]):-!.
giao([H|T1],L2,[H|T3]):-tim(L2,H),giao(T1,L2,T3),!.
giao([_|T1],L2,L3):-giao(T1,L2,L3).
6. Viết vị từd ao nhận đối số là một danh sách và in ra danh sách đảo của nó
Vd: dao([1,2,3,4,5],L) L=[5,4,3,2,1]
noi([],X,[X]).

sapgiam([H|T]. saptang([H]. 9.T1). chen([H|T].!.L1).4] chiahai([8.T2):-saptang(T.T1).!.R) – R là danh sách L trong đó E đã được chèn vào đúng vị trí (giả sử L đã được sắp theo thứ tự giảm) Vd: chen( [5.L4).T1.5. 8.5].9. Z=[6.4.L) L=[6.[X|[H|T]]):-X>=H.T2).[E|[H|T]]):-H>E.5.3.[]).[H|T3]):-chen(T.[X]):-!.chen(H.[H|T]. chen(X.6].[H|T].E. 10.L).1] chen([]. chenDS([].5.noi([H|T].E. dem([_|T].4.7.noi(L1. .E.[H|T].2. Z=[9.3.T2).X. Viết vị từs apt a ng vàs apg i a m nhận đối số là một danh sách và sắp danh sách theo thứ tự tăng hoặc giảm Vd: sapgiam([1.[H|T].L4.T1).X.5].Z) Y=[1. chenDS([H|T].[].4.[H]):-!.3.4.2.4.12. chenn(X.[X|[H|T]]):-X=<H.5.[H|T1]):-chenn(X.T.Y) Y=[3.1].T1).Y. chenn(X. chen(X.4. Viết vị từc he n(L.4.[X|[H|T]]):-X=<H.4.L2.[E]). dao([H|T].N1).9.5. Vd: chiahai([1.chen(H.chenDS(T. chen(X.[H|T1]):-chen(X.L2.N):-dem(T.Z) Y=[4.7.5.3].[H|T].L3) – L3 là danh sách L2 đã được chèn vào tất cả nhừng phần tử của danh sách L1 Vd: chenDS( [3. saptang([H|T]. saptang([H|T].R) R=[5.Y) Y=[6.0):-!.Y.!.1] chen([].2.chenn(H.!.T1.[6.[H]):-!. dao([].E.3. chen([H|T].E.12]. chen([H|T].L3):-chen(L2.H. Viết vị từc he nD S(L1.T2):-sapgiam(T.N=N1+1.4.2.[H|T].8.[E|[H|T]]):-H<E. Viết vị từc h ia h ai chia danh sách ra làm hai danh sách con bằng nhau.T1.[].4.T1).5].[H|T1]):-chen(X.L):-dao(T.3.E.3.2.1] saptang([8.3.12.12] chen(X. chen(X.9.E.8.[H|T3]):-chen(T.E.T2):-saptang(T. 7.7.2.T. danh sách con thứ nhất sắp theo thứ tự tăng và danh sách con thứ hai sắp theo thứ tự giảm. chenn(X.T2).T3).!.[X]):-!.[E]).5.H.T3). sapgiam([H].[]. saptang([H].T.3. chen([H|T].6].1].3] dem([].L).T1).[H|T1]):-noi(T. chen(X.T1).[X]):-!.2.E.2.L.7.L3).[H]):-!.

L2.[H|T2]):-thaythe(X.[H|T].Z).[2.[].L) Y=[8.1.[H|T1]):-chenn(X.H. 14.6.N1.5.2.!.4.2] xoaptdau([4.6] xoadsc([H|T].5.[H|T1].6. Viết vị từxo a xh ds(L1.3.Y):-N1 is N-1.2.5.3] xoapt([].Y.8.T1).[H|T].L) L=[4.T2)._.buoc(N1.5].[H|T].[X|[H|T]]):-X>=H.L).Y).X.T):-!.5.L3) trong đó L3 là danh sách L1 đã xóa đi tất cả những lần xuất hiện của danh sách L2 (nếu L2 là danh sách con của L1) .[].9.T2).2. chiahai(X.[K|T2]):-thaythe(H.4]) Y=[1.L.1]) Y=[1. buoc(N.L.[H1|T1].[1.!.6.L3) trong đó L3 là danh sách L1 đã xóa đi lần xuất hiện đầu tiên của danh sách L2 (nếu L2 là danh sách con của L1) Vd: xoadsc([1.4.!.T2):-sapgiam(T.6].6].5. Viết vị từxo a pt da u nhận đối số là một danh sách cùng số nguyên dương X và xóa phần tử bằng X đầu tiên trong danh sách.L).0.buoc(N1. buoc(_.X.2.[H|T3]):-N1 is N+1.5.Y). Viết vị từth ay the(X.N). 12.6] thaythe(_.K. Vd: xoaptdau([4.Y1.T1).phan(X.[X]):-!.L.K.6].T1).5.(N mod 2) =:= 0.9.chenn(H.H.[]):-!. 11.[]. xoaptdau([H|T]. buoc(_.[].L2.T1):-xoapt(T. thaythe(X.Z):-dem(X.N).T3). xoapt([H|T].T3).9.6.[H]):-!.sapgiam(Z1. xoadsc([H|[H1|T]].L2.L) L=[4.L) L=[4.T2). Viết vị từxo a dsc(L1.[H|T1]):-xoapt(T.[H1|T1].L2.Z1).Y.[].6.T1.[H|[H1|T1]].3. xoapt([H|T].5.9.4.saptang(Y1.6] xenke(L. Viết vị từxe n ke(L1.6.[H|T2].T1).phan(T.5.Y.[H|T1]):-xoaptdau(T. 15. chiahai(X. 13.2.T1). thaythe(H. xoadsc([H|T].3.[4.X).3.T.4.Z).2].[H].3.9. sapgiam([H|T].5.L.L3):-buoc(0.[H|T3]):-N mod 2=:=0.9.[H|T].L2.T.saptang(Y1.9. Viết vị từxo apt nhận đối số là một danh sách cùng số nguyên dương X và xóa tất cả những phần tử bằng X trong danh sách.3.6].Z1).R) trong đó R là danh sách L mà tất cả các phần tử X đã được thay thế bằng Y Vd: thaythe(1.8.L3). chenn(X.Y1.X.[H|T2]):-xoadsc(T.Y.T1.3.1.L.X):-xoadsc([H1|T]. chenn(X.[H1|T1].T):-!. phan(T.H.2. sapgiam([H].N1.phan(X.Z):-dem(X._.1.N1 is (N/>2).L) L=[1.2. buoc(N.L2.5. Vd: xoapt ([4.6] xoadsc([1. 16.!.L.L2.4.T):-!.6.chenn(X.2.L3) trong đó danh sách L3 được tạo nên bằng cách lấy xen kẽ các phần tử của L1 và L2 Vd: xenke([1.5.Y.3.2] xoaptdau([H|T].T2.N1 is N/2. phan([H|T].5.4.[H|T].sapgiam(Z1.N1 is N+1.!.2].[1.T.3.N1.Y).T2).X.6].T.N.2.9.[]).

[H].1):-!.T2).2.[H1|T1].N1).[H1|T1].[H|T2]):-xoadsc(T.N=N1+1.M):-ktdsc([H1|T].5.!.Y).2]) Y=[3.Vd: xoaxhds([1.6] xoadsc([H|T].!.M):-ktdsc(T.6].[H|[H1|T1]].xoaxhds(X.[H1|T1].[H|T2]):-xoaxhds(T.X).[H1|T1].M=M1+1. . dem([_|T]. xoadsc([H|[H1|T]].Y):ktds([H|T].N):-dem(T. xoaxhds([H|T].[H1|T1].5. ktdsc([_|T]. xoadsc([H|T].M).N). ktds(X.[H].X1):-ktdsc(X.xoadsc([H|T].1. ktdsc([H|[H1|T]].M).[H1|T1]. xoaxhds([H|T].T):-!.[H1|T1].[H1|T1].0):-!.[H1|T1]. dem([].X).T2).4.!.[H1|T1].2.dem(X1.[H|[H1|T1]].[]):-!._. xoaxhds([].!.4. ktdsc([H|_].3.X):-xoadsc([H1|T].M=:=N.[H1|T1]).X1.[1.M1).[H1|T1].

_. nghiem(_._. tong(1. predicates so_nguyen_to(integer) clauses so_nguyen_to(2):-!._.nl.B1.real) nghiem(real.write("VN"). gt(A.DX._.1). 12.Y=DY/D.readreal(A2). write("Nhap A2:")._):-D=0. 5.nl._._.K).nl.DX.real.real.C2):-D=A1*B2-A2*B1.D.C1.1):-!. tong(0. write("Nhap A1:")._. write("Tong La:".real) 14. 10.gt(A1.DX=0._.Y). write("Nhap B2:").nl.readreal(C2).A2.nl._. so_nguyen_to(N).readreal(A1). predicates giaihe(real.M=M1+1/K. goal write("Nhap he so:"). M MOD N <> 0.DX.C1. goal write("Nhap N=")._.write("KKhong Xet").nl.write("Khong Phai So Nt").B2.1.M) 9.nl. predicates 2. write("Nhap N="). gt(0.readreal(B1).nl.real.DX=C1*B2-C2*B1. so_nguyen_to(K):-K<=0.B):-A1=A-1.real. nghiem(_.N1=N-1. write("Nhap A1:").D.readreal(C1).real) clauses giaihe(A1.real.nl.write("X=".DX. goal 7. giaihe(A1.X=DX/D.B2.DY):-D<>0.B1.B1). 6.real.DX<>0.real._._. tong(integer.readint(N). tong(N. 17.D. N<M.M):-N>0.DY). .1). 19.write("La so nguyen to"). gt(integer. 8.write("Y=".M=M1+1/(2*N+1). 11.tong(N.real. nghiem(_. clauses 4._. tong(integer._._.readint(N).integer) 15.tong(A1.readreal(B2).C2. so_nguyen_to(M):-M>0.real. predicates 13. clauses 16.C1.B2.A1.A2.B=B1*A.M1).M1). write("Nhap C2:")._):-D=0.B1.real. 18.nghiem(A1.D.M):-gt(A.C2).real.DY=A1*C2A2*C1.A1=A-1.M).real) 3.tong(N1.X). tong(A.so_nguyen_to(N).write("VSN"). write("Nhap C1:").

tong(2. giai_thua(N.M2). reply(De.D.Dy):-De=0. write("Nhap X = ").readreal(E).readreal(C).integer) clauses fibo(1.Dx=C*E-F*B.real. 10. reply(De. clauses 15.M).B.Z1). clauses 28.nl. slove(A.B=B1+B2.M):. giai_thua(N1. write("Nghiem cua he la:").B):-A>=1.integer) tong(integer. 8.Y=Dy/De. 16.fibo(N1. goal 21. X=Dx/De. 36.1.fibo(N2.write("X = ". 17.N2=N-2. slove(A.tong(A1.Z) 24.Dy).Dy):-De<>0.mu(X. mu(X.Dx.Dy=0. 29.integer) 3.Y. reply(De.nl. 23.real) 26.N>=0.integer) 14. 40.C. 20. goal 37. write("khong xet") 12.M):-write("N!=".Dx.A1=A-1.real.integer.readint(X).1). giai_thua(_. giai_thua(integer. goal .readreal(A).B2).B1). mu(X. tong(A._. slove(real.real. goal 9.E.nl 35.write("Ket qua Z = ".Dx.B. write("Nhap Y = ").D. 39.Z):-Y1=Y-1. 11.1). readint(N). mu(_.Dx. 31. mu(X.F). giai_thua(0. 6.M).write("he pt vn"). 18.Dx=0. fibo(2.Dx<>0.write("Y= ". reply(De. 19.F. 32.real.M1).M=M1+M2.1).readint(Y).readreal(D). 30.B. write("Nhap A.Y.Y1.1).N>0.Z).C. .X)._. readreal(F). write("Nhap N = ").").C.F):-De=A*E-B*D. predicates 25.giai_thua(N. Tổng n số Fibonacy đầu tiên predicates fibo(integer. mu(1. predicates 2.real. readreal(B). predicates 13.1. 22.fibo(A.Dy<>0. 4.0).2). mu(integer.Dy=A*F-C*D.M):-N1=N-1. 34.1).M1). 38.E.M=M1*N.real) 27.X). mu(0.Z=Z1*X.E.D. /*quy t¾c*/ 7. clauses 5.write("he pt voso nghiem").1. 33. reply(real.Y). fibo(N.Dy):-De=0. N1 = N .0.

tong(A. 2/ GIAI PTB2: viet:." la : ".Y):-parent(X. X is (-B/(2*A)). Nan wa // goal ancestor(tom.amy).gpt(B. mother(grace.M1).write(X).I1=I+1.EX.B.X is (-B/A).String) mother(String.Y):-father(X.B). gpt(0.Z).B. tong(_. gpt(D.Y). 1.M):-2*I-1<1/EX.write('X = ').C):-(B mod 2)=0.X):.write('Phuong trinh vo so nghiem').D is (B*B-4*A*C). gpt2(0.B. parent(X.String) parent(String.ancestor(Z.amy).C):-(B mod 2)<>0.C=-1. predicates heso(integer. .readint(A).C):.EX.write('Phuong trinh vo nghiem').E):. GIAI PTB1: /*PT ax+b=0*/ gpt(0.C).write('Nghiem cua phuong trinh la:'). tong(0.write('Phuong trinh vo nghiem').C). gpt(0.EX. gpt(0. gpt2(A. gpt2(A.Y).X):.X).real) tong(integer.write("Nhap N=").String) ancestor(String.EX.M1=M+C/(2*I11).D< 0 .0).write('Chuong trinh giai phuong trinh bac 2').1/(2*I1-1)<EX.X):. ancestor(X.M). parent(X.write('X = ').Y):-mother(X. tong(I.A>=1.E):.heso(I2. //trong de co cho cai nay len tren cuoi cung minh lam sai mat roi.write('Phuong trinh co nghiem kep:').nl.Y).fred). father(jack.real.X).tong(I1.readreal(EX). ancestor(X.B).A. heso(B.D is (B*B-4*A*C). heso(B.M):-write("PI/4 với sai số ".I2=I1+1.X is (-E/D).0.write(X).write('Phuong trinh vo so nghiem')." so Fibonacy dau tien la : ".Y):-parent(X.C):.0):.Y).B.write('Phuong trinh vo nghiem').fred).write("Tong ". gpt(A. goal chay predicates father(String.String) clauses father(tom. mother(amy.real) chay clauses chay:-write("Nhap exilon = ").C=1.D =:=0.write("Tom la to tien cua : ".C):.EX.B.

nl.L):-sort(R1.[].gpt2(A.C). X1 is (-B-sqrt(D)/(2*A)).D >0.list.D is (B*B-4*A*C).B.[A|C]):.[A|B].R).list) sort(list. CAC BAN KIEM TRA LAI NHE. insert(E.insert(E. sort([].list) Clauses insert(E.nl. sort([X|R1].write('Phuong trinh co 2 nghiem'). X is (-B+sqrt(D)/(2*A)).[]).B.write(X).[E.[E]).write(X1). .E<=A. insert(E.R.write('X2 = ').E>A.A|B]):.write('X1 = ').L).insert(X. % Author: % Date: 10/19/10 Domains list=integer* Predicates insert(integer.C):.[A|B].

Sign up to vote on this title
UsefulNot useful