1. Trang chủ
  2. » Kỹ Thuật - Công Nghệ

TỔNG HỢP CÁC LỜI GIẢI CÁC BÀI TẬP PROLOG KIỂM TRA GIỮA KÌ CAO HỌC ĐH GTVT TP HCM

12 2 0

Đ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

Thông tin cơ bản

Tiêu đề Tổng hợp các lời giải các bài tập Prolog kiểm tra giữa kỳ cao học ĐH GTVT TP HCM
Tác giả TS. Phan Văn Đức
Trường học Đại học Giao thông vận tải TP Hồ Chí Minh
Chuyên ngành Lập trình logic và ràng buộc
Thể loại Tổng hợp bài tập
Năm xuất bản 2023
Thành phố TP Hồ Chí Minh
Định dạng
Số trang 12
Dung lượng 1,04 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

BÀI TẬP KIỂM TRA GIỮA KỲ Môn học Lập trình Logic và ràng buộc Học viên Nguyễn Duy Quốc Thái 1 Viết chương trình find max và find min tìm Min và Max của hai số? 2 Tìm phần tử Tìm phần tử cuối cùng của.

Trang 1

BÀI TẬP KIỂM TRA GIỮA KỲ Môn học Lập trình Logic và ràng buộc Học viên: Nguyễn Duy Quốc Thái

1. Viết chương trình find_max và find_min tìm Min và Max của hai số?

2. Tìm phần tử

- Tìm phần tử cuối cùng của danh sách:

?- member( c, [ a, b, c ] )

Yes

- Tìm phần tử kề cuối của danh sách? (phần tử cuối cùng thứ 2):

- Tìm phần tử thứ K của một danh sách:

? - member_at(X, [a, b, c, d], 2, R)

X = b

R = [a, c, d]

- Tìm số phần tử của danh sách?

?- length( [ a, b, c, d, e ], L ).

L=5

Yes

?- length( [ a, [ b, c ], d, e ], N ).

N = 4

Yes

Trang 2

3. Đảo ngược danh sách?

4. Tìm xem một danh sách có phải là một palindrome hay không? Một

palindrome có thể được đọc về phía trước hoặc phía sau; ví dụ: [x, a, m,a, x].

?- palindrome([ x, a, m, a, x ])

Yes

Trang 3

5. Loại bỏ các 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]

6. Đóng gói các phần tử danh sách trùng lặp liên tiếp thành danh sách con?

Ví dụ:

:? - pack([a, a, a, a, b, c, c, a, a, d, e, e, e, e], X)

X = [[a, a, a, a], [b], [c, c], [a, a], [d], [e, e, e, e]]

7. Sao chép các phần tử của danh sách?

Ví dụ:

:? - Dupli([a, b, c, c, d], X)

X = [a, a, b, b, c, c, c, c, d, d]

8. Nhân đôi các phần tử của danh sách một số lần nhất định?

Ví dụ:

:? - Dupli([a, b, c], 3, X)

X = [a, a, a, b, b, b, c, c, c]

9. Bỏ mọi phần tử thứ N khỏi danh sách?

Ví dụ:

:? - drop([a, b, c, d, e, f, g, h, i, k], 3, X)

X = [a, b, d, e, g, h, k]

10. Chia danh sách thành hai phần; chiều dài của phần đầu tiên đã cho?

Ví dụ: :? - split([a, b, c, d, e, f, g, h, i, k], 3, L1, L2).

L1 = [a, b, c]

L2 = [d, e, f, g, h, i, k

Trang 4

11.Xóa phần tử K khỏi danh sách?

Ví dụ:

? - remove_at(X, [a, b, c, d], 2, R)

X = b

R = [a, c, d]

Trang 5

Môn học: Lập trình logic và ràng buộc TS Phan Văn Đức

2

Bài 1 :

+ Tìm Max: X là max khi X >= Y và ngược lại

find_max(X,Y,X):-X>=Y

find_max(X,Y,Y):-X<Y

Trang 6

Môn học: Lập trình logic và ràng buộc TS Phan Văn Đức

3

+ Tìm Min : X là min khi X <Y và ngược lại

find_min(X,Y,X):-X<Y

find_min(X,Y,Y):-X>=Y

Bài 2 :

- Tìm phần tử cuối của danh sách :

last([H],H)

last([H|T],L):-last(T,L)

Trang 7

Môn học: Lập trình logic và ràng buộc TS Phan Văn Đức

4

- Kiểm tra phần tử K có thuộc danh sách :

member(Z,[H|T])

member((Z,[_|T]):-member(Z,T)

- Tìm số phần tử của danh sách :

sumMem([],0)

sumMem([_|T],N):-sumMem(T,N1), N is N1 +1

Bài 3 :

Sử dụng lệnh reverse với quy tắc reverse([Danh sách],Kết_quả)

Trang 8

Môn học: Lập trình logic và ràng buộc TS Phan Văn Đức

5

Trong đó, danh sách là [a,b,c,d,e,f], L là kết quả xuất ra danh sách ngược

Bài 4 :

palindrome(X):-reverse(X,X)

Bài 5 :

remove([],[])

remove([H|T],X):-remove(T,[H],Z),reverse(Z,X)

remove([],X,X)

remove([H|T],[K|Z],X):-H=K,remove(T,[H|Z],X)

remove([H|T],[K|Z],X):-H\=K,remove(T,[H,K|Z],X)

Trang 9

Môn học: Lập trình logic và ràng buộc TS Phan Văn Đức

6

Bài 6 :

pack(X,Y) :- pack(X,[],_,Y)

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

Trang 10

Môn học: Lập trình logic và ràng buộc TS Phan Văn Đức

7

Bài 7 :

dups([],[])

dups([H|T],[H,H|T2]):-dups(T,T2)

Bài 8 :

appendlist([], X, X)

appendlist([H|T], L1, [H|L2]) :- appendlist(T, L1, L2)

dupli([], M, []) :-!

dupli([X], 1, [X]) :-!

dupli([X], M, [X|L]) :- N is M - 1, dupli([X], N, L), !

dupli([H|T], M, L1) :- dupli([H], M, H1), dupli(T, M, T1), appendlist(H1, T1, L1), !

Trang 11

Môn học: Lập trình logic và ràng buộc TS Phan Văn Đức

8

Bài 9 :

drop(L, N,

X):-drop2(L, N, X, N)

drop2(_, _, _, 1)

drop2(L, N, X,

C):-N mod C =:= 0,

remove(L, N, X),

Z is C-1,

drop2(L, N, X, Z)

drop2(L, N, X,

C):-Z is C-1,

drop2(L, N, X, Z)

remove([_|T], 1, T)

remove([H|T1], N,

[H|T2]):-N > 1,

Z is N - 1,

remove(T1, Z, T2)

Trang 12

Môn học: Lập trình logic và ràng buộc TS Phan Văn Đức

9

Bài 10 :

split([],[],[])

split([X],[X],[])

split([X,Y|T],[X|L1],[Y|L2]):-split(T,L1,L2)

Bài 11 :

remover( _, [], [])

remover( R, [R|T], T2) :- remover( R, T, T2)

remover( R, [H|T], [H|T2]) :- H \= R, remover( R, T, T2)

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

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w