Lời giải bài tập prolog chương 3 Các phép toán và số học môn lập trình logic và ràng buộc.

42 1 0
Lời giải bài tập prolog chương 3 Các phép toán và số học   môn lập trình logic và ràng buộc.

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

TRƯỜNG ĐẠI HỌC GIAO THÔNG VẬN TẢI TP HỒ CHÍ MINH VIỆN ĐÀO TẠO SAU ĐẠI HỌC BÁO CÁO HỌC PHẦN LẬP TRÌNH LOGIC VÀ RÀNG BUỘC CHƯƠNG 3 CÁC PHÉP TOÁN VÀ SỐ HỌC Giảng viên hướng dẫn TS PHAN VĂN ĐỨC TP Hồ Chí.

TRƯỜNG ĐẠI HỌC GIAO THƠNG VẬN TẢI TP HỒ CHÍ MINH VIỆN ĐÀO TẠO SAU ĐẠI HỌC BÁO CÁO HỌC PHẦN: LẬP TRÌNH LOGIC VÀ RÀNG BUỘC CHƯƠNG 3: CÁC PHÉP TOÁN VÀ SỐ HỌC Giảng viên hướng dẫn : TS PHAN VĂN ĐỨC TP Hồ Chí Minh - 2023 MỤC LỤC DANH MỤC HÌNH ẢNH .II PHẦN 1: BÀI TẬP GIỮA KỲ .1 1.1 Bài 1.2 Bài 1.3 Bài 1.4 Bài 1.5 Bài 1.6 Bài 1.7 Bài 1.8 Bài 10 1.9 Bài 11 1.10 Bài 10 12 1.11 Bài 11 13 PHẦN 2: BÀI TẬP CUỐI KỲ .15 2.1 Bài 15 2.2 Bài 20 2.3 Bài 22 2.4 Bài 27 2.5 Bài 29 2.6 Bài 30 2.7 Bài 31 2.8 Bài 32 2.9 Bài 33 2.10 Bài 10 34 2.11 Bài 11 37 DANH MỤC HÌNH ẢNH Hình 1-1: Kết tìm max số theo Prolog Hình 1-2: Kết tìm phần tử cuối Hình 1-3: Kết kiểm tra phần tử thuộc danh sách Hình 1-4: Kết tính số phần tử thuộc danh sách Hình 1-5: Kết đảo ngược danh sách Hình 1-6: Kết kiểm tra parlindrome (đối xứng) Hình 1-7: Kết loại bỏ phần tử danh sách trùng lặp liên tiếp Hình 1-8: Kết đóng gói phần tử trùng .8 Hình 1-9: Kết xây dựng hàm nhân đôi danh sách Hình 1-10: Kết xây dựng tốn nhân đơi theo u cầu 10 Hình 1-11: Kết bỏ phần tử thứ N khỏi danh sách 12 Hình 1-12: Kết chia list thành phần 13 Hình 1-13: Kết xóa phần tử khỏi list 14 Hình 2-1: Kết với X = Y khơng xác định kết .15 Hình 2-2: Kết với X is Y khơng xác định kết .16 Hình 2-3: Kết với X=Y,Y=Z,Z=1 khơng xác định kết 16 Hình 2-4: Kết với X=1, Z=ZY, X=Y 17 Hình 2-5: Kết với X is 1+1, Y is X 17 Hình 2-6: Kết với Y is X, X is 1+1thì khơng xác định kết 18 Hình 2-7: Kết với 1+2 == 1+2 18 Hình 2-8: Kết với X == Y .18 Hình 2-9: Kết với =:= 2-1 19 Hình 2-10: Với X =:= Y khơng xác định kết 19 Hình 2-11: Với op(X) is op(1) khơng xác định kết .20 Hình 2-12: Kết với op(X) = op(1) 20 Hình 2-13: Kết Với op(op(Z), Y) = op(X, op(1)) 21 Hình 2-14: Kết Với op(X, Y) = op(op(Y), op(X)) 21 Hình 2-15: Kết hàm cộng .23 Hình 2-16: Kết hàm cộng .24 Hình 2-17: Kết hàm nhân .25 Hình 2-18: Kết hàm chia 26 Hình 2-19: Kết hàm tìm ước số chung lớn 27 Hình 2-20: Kết viết hàm Prolog để kiểm tra số nhập vào có phải số nguyên tố 28 Hình 2-21: Kết viết chương trình tính số Fibonacci từ số nhập vào 29 Hình 2-22: Kết tính chuỗi gần phương trình (2.6.1) 31 Hình 2-23: Kết Viết hàm tạo 10 số tự nhiên cho kết trả số tăng dần .32 Hình 2-24: Viết hàm tạo số giảm dần mà giới hạn tối đa hiệu số cho trước 33 Hình 2-25: Kết viết hàm tạo số tăng dần mà giới hạn tổng số cho trước .34 Hình 2-26: Sơ đồ .35 Hình 2-27: Viết chương trình truy vấn 36 Hình 2-28: Đường thẳng, ngang, xiên 37 Hình 2-29: Kết mô kiểm tra đường thẳng, ngang, xiên 38 PHẦN 1: BÀI TẬP GIỮA KỲ 1.1 Bài Đề bài: Viết chương trình find_max find_min tìm Min Max hai số Code chương trình: % chuong trinh tim min, max cua so maxmin_of_two(X,Y,X) :- X >= Y, write('Max is '), write(X),nl, write('Min is '),write(Y) maxmin_of_two(X,Y,Y) :- X < Y, write('Max is '),write(Y),nl, write('Min is'),write(X) Kết mô theo Prolog: Hình 1-1: Kết tìm max số theo Prolog 1.2 Bài Đề bài: Tìm phần tử - Tìm phần tử cuối danh sách - Kiểm tra phần tử K danh sách - Tìm số phần tử danh sách? Tìm phần tử cuối danh sách Code chương trình: % Tim phan tu cuoi cung last(List, Last) :- append(_, [Last], List) Kết mơ theo Prolog: Hình 1-2: Kết tìm phần tử cuối Kiểm tra phàn tử K danh sách Code chương trình: %Kiem tra phan tu thuoc danh sach Kết mô theo Prolog: member( X,[ X|T]) Tìmmember( số phần tử củaT] danh X,[_| ) :- sách member( X, T) Code chương trình: %Tinh so phan tu thuoc danh sach list_length([],0) list_length([_|TAIL],N) list_length(TAIL,N1), N is N1 + Hình 1-3: Kết quả:-kiểm tra phần tử thuộc danh sách Kết mô theo Prolog: 1.3 Bài Đề Đảo ngược danh sách Code chương trình: %viet chuong trinh dao nguoc danh sách reverse([ ],[ ]) reverse([X|Tail],R):-reverse(Tail,R1),append(R1,[X],R) Kết mô theo Prolog: 1.4 Bài Hình 1-4: Kết tính số phần tử thuộc danh sách Đề bài: Tìm xem danh sách có phải palindrome hay khơng? Code chương trình:có thể đọc phía trước phía sau; ví dụ: Mộtpalindrome [x, a, m,a, x] % viet chuong trinh kiem tra parlindrome(doi xung) palindrome(L) :-reverse( L, L ) Kết mô theo Prolog: 1.5 Bài Hình 1-5: Kết đảo ngược danh sách Đề bài: Loại bỏ phần tử danh sách trùng lặp liên tiếp? Ví dụ: :? - remove([a, a, a, a, b, c, c, a, a, d, e, e, e, e], X) 1X = [a, b, c, a, d, e] Hình 1-6: Kết kiểm tra parlindrome (đối xứng) Code chương trình: %Kết loai bomơ cac phantheo tu Prolog: trung danh sach remove( [] , [] ) remove( [X|Xs] , Ys ) :- remove(Xs, [X], Ts ), reverse(Ts,Ys) remove( [] , Ys , Ys ) remove( [X|Xs] , [T|Ts] , Ys ) :- X = T , remove( Xs , [X|Ts] , Ys ) remove( [X|Xs] , [T|Ts] , Ys ) :- X \= T , remove( Xs ,[X,T|Ts] , Ys ) 1.6 Bài Đề bài: Đóng gói phần tử danh sách trùng lặp liên tiếp thành danh sách con? VíCode dụ: chương trình: :? - pack([a, a, a, a, b, c, c, a, a, d, e, e, e, e], X) %dong cac X = [[a, a,goi a, a], [b],phan [c, c],tu[a,trung a], [d],nhau [e, e, e, e]] 1-7: Kết quảProlog: loại bỏ phần tử danh sách trùng lặp liên tiếp pack(X,Y) :- pack(X,[],_,Y) Kết quảHình mô theo pack([H,H|T],Acc,X,R) :- pack([H|T],[H|Acc],X,R) pack([H,H1|T], Acc, X,R) :- H\=H1, Acc1=[H|Acc],append(X, [Acc1], X1),pack([H1|T],[],X1,R) pack([H], Acc, X,R) :-Acc1=[H|Acc], append(X, [Acc1], X1),R = X1 Hình 1-8: Kết đóng gói phần tử trùng 1.7 Bài Đề bài: Sao chép phần tử danh sách? Code chương trình: Ví dụ: :? - Dupli([a, b, c, c, d], X) doi danh sach X = [a,%xay a, b, b,dung c, c, c,ham c, d, nhan d] Kết dupl([],[]) chạy mô theo Prolog: dupl([O|U],[O,O|U1]) :- dupl(U,U1) Hình 1-9: Kết xây dựng hàm nhân đơi danh sách 1.8 Bài Đề bài: Nhân đôi phần tử danh sách số lần định? Ví dụ: Code chương trình: :? - Dupli([a, b, c], 3, X) Prolog: X Kết = [a,quả a,bai a,chạy b, b,mô b, c, c,doi c]theo %xay dung toan nhan theo yeu cau list_copy_h([], _, _, []) list_copy_h([_ | Tin], 0, Num, Lout) :- succ(Num, Np1), list_copy_h(Tin, Np1, Np1, Lout) list_copy_h([H | Tin], Count, Num, [H | Tout]) :- succ(Cm1, Count), list_copy_h([H | Tin], Cm1, Num, Tout) list_copy(Lin, Num, Lout) :- list_copy_h(Lin, Num, Num, Lout) Hình 1-10: Kết xây dựng bài6tốn nhân đơi theo u cầu - Kết mơ theo Prolog: Hình 2-32: Kết hàm tìm ước số chung lớn 2.4 Bài Đề bài: Viết hàm Prolog để kiểm tra số nhập vào có phải số ngun tố? Code chương trình: % is_prime(P) :- P is a prime number % (integer) (+) is_prime(2) 24 is_prime(3) is_prime(P) :- integer(P), P > 3, P mod =\= 0, \+ has_factor(P,3) % has_factor(N,L) :- N has an odd factor F >= L - Kết mơ phỏng: Hình 2-33: Kết viết hàm Prolog để kiểm tra số nhập vào có phải số nguyên tố 2.5 Bài Đề bài: 25 Viết chương trình tính số Fibonacci từ số nhập vào Code chương trình: fibo(0, 0) fibo(N, F) :-N >= 1,fib1(N, 1, 0, F) fib1(1, F, _, F) fib1(N, F2, F1, FN) :N > 1, N1 is N - 1, F3 is F1 + F2, fib1(N1, F3, F2, FN) Kết mơ phỏng: Hình 2-34: Kết viết chương trình tính số Fibonacci từ số nhập vào 2.6 Bài Đề bài: Tính chuỗi gần đúng: Code chương trình: x3 e  1 x   2! 3! x x 26 (2.6.1) expower(X, S) :sum(X, S, 0, 1) sum(_, T, _, T) :abs(T) < 0.000001 sum(X, S, I, T) :abs(T) > 0.000001, I1 is I + 1, T1 is T*X/I1, sum(X, S1, I1, T1), S is S1 + T Kết mơ phỏng: 27 Hình 2-35: Kết tính chuỗi gần phương trình (2.6.1) 2.7 Bài Đề bài: Viết hàm tạo 10 số tự nhiên cho kết trả số tăng dần Code chương trình: count_to_10(10) :- write(10),nl count_to_10(X) :write(X),nl, Y is X + 1, count_to_10(Y) Kết mô phỏng: 28 Hình 2-36: Kết Viết hàm tạo 10 số tự nhiên cho kết trả số tăng dần 2.8 Bài Đề bài: Viết hàm tạo số giảm dần mà giới hạn tối đa hiệu số cho trước Code chương trình: count_down(L, H) :between(L, H, Y), Z is H - Y, write(Z), nl Kết mơ phỏng: 29 Hình 2-37: Viết hàm tạo số giảm dần mà giới hạn tối đa hiệu số cho trước 2.9 Bài Đề bài: Viết hàm tạo số tăng dần mà giới hạn tổng số cho trước Kết mô phỏng: 30 Hình 2-38: Kết viết hàm tạo số tăng dần mà giới hạn tổng số cho trước 2.10 Bài 10 Đề bài: Viết chương trình truy vấn theo sơ đồ hình (2-26) 31 Hình 2-39: Sơ đồ Code chương trình: /* The tree database */ :- op(500,xfx,'is_parent') a is_parent b c is_parent g f is_parent l j is_parent q a is_parent c c is_parent h f is_parent m j is_parent r a is_parent d c is_parent i h is_parent n j is_parent s b is_parent e d is_parent j i is_parent o m is_parent t b is_parent f e is_parent k i is_parent p n is_parent u n is_parent v /* X and Y are siblings i.e child from the same parent */ :- op(500,xfx,'is_sibling_of') X is_sibling_of Y :- Z is_parent X, Z is_parent Y, X \== Y 32 leaf_node(Node) :- \+ is_parent(Node,Child) % Node grounded /* X and Y are on the same level in the tree */ :-op(500,xfx,'is_at_same_level') X is_at_same_level X X is_at_same_level Y :- W is_parent X, Z is_parent Y, W is_at_same_level Z Kết mơ phỏng: Hình 2-40: Viết chương trình truy vấn 33 2.11 Bài 11 Đề bài: Viết chương trình kiểm tra đường thẳng, ngang, xiên theo hình (2-28) Code chương trình: vertical(seg(point(X,_),point(X,_))) Kếthorizontal(seg(point(_,Y),point(_,Y))) mơ phỏng: Hình 2-41: Đường thẳng, ngang, xiên oblique(seg(point(X1,Y1),point(X2,Y2))) :-X1 \== X2, Y1 \== Y2 Hình 2-42: Kết mô kiểm tra đường thẳng, ngang, xiên 34

Ngày đăng: 01/05/2023, 16:31

Tài liệu cùng người dùng

Tài liệu liên quan