Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 13 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
13
Dung lượng
1 MB
Nội dung
lOMoARcPSD|9242611 TỔNG LIÊN ĐOÀN LAO ĐỘNG VIỆT NAM TRƯỜNG ĐẠI HỌC TÔN ĐỨC THẮNG KHOA CÔNG NGHỆ THÔNG TIN BÀI TẬP LỚN MÔN CẤU TRÚC RỜI RẠC …tên đề tài … Hiện thực chương trình chuyển biểu thức logic từ infix sang postfix tính bảng chân trị dựa biểu thức postfix vừa tìm Người hướng dẫn: GV Trần Hồng Tài Người thực hiện: Nguyễn Huy Lớp : 18H50202 Khóa : 22 THÀNH PHỐ HỒ CHÍ MINH, NĂM 2019 lOMoARcPSD|9242611 LỜI CẢM ƠN Em cảm ơn thầy Trần Hồng Tài hướng dẫn em làm hoàn thành tiểu luận lOMoARcPSD|9242611 MỤC LỤC Chương 1: Giới thiệu 1.1: Liệt kê công việc cá nhân làm theo thời gian 1.2: Giới thiệu chương Chương 2: Cơ sở lý thuyết 1.1: Lý thuyết Reverse Polish notation 1.2:Lý thuyết logic dùng để tính bảng chân trị Chương 3: Thực nghiệm Chương 4: Kết lOMoARcPSD|9242611 CHƯƠNG 1: GIỚI THIỆU 1.1 Liệt kê công việc cá nhân làm theo thời gian Ngày 4/11/2019 Lên mạng tìm lý thuyết giải thuật Ba Lan ngược, cách sử dụng, công dụng lợi ích giải thuật Ngày 5/11/2019 bắt đầu code giải thuật Ba Lan Chuyển biểu thức logic từ infix sang postfix Ngày 6/11/2019 xem lý thuyết bảng chân trị, cách vẽ bảng chân trị ngơn ngữ Python Ngày 7/11/2019 tiến hành code tính tốn biểu thức logic bảng chân trị Ngày 8/11/2019 viết báo cáo 1.2 Giới thiệu chương Chương 2: Cơ sở lý thuyết Ở chương tìm hiểu lý thuyết giải thuật Ba Lan ngược, lý thuyết logic tính tốn bảng chân trị Chương 3: Thực nghiệm Ở chương thực nghiệm vài ví dụ cách chạy tay thuật toán làm file Essay.py Chương 4:Kết Ở chương ta chạy chương trình mà code để kiểm tra xem kết chạy có kết giống với kết thực chương hay không lOMoARcPSD|9242611 Chương 2: Cơ sở lý thuyết 1.1: Lý thuyết Reverse Polish notation Ký pháp nghịch đảo Ba Lan phát minh vào khoảng thập kỷ 1950 Charles Hamblin.Từ tên hậu tố bạn đoán phần theo cách biểu diễn này, toán tử đặt sau toán hạng Cụ thể biểu thức trung tố: 4+5 biểu diễn thành + Quá trình tính tốn giá trị biểu thức hậu tố tự nhiên máy tính Ý tưởng đọc biểu thức từ trái sang phải, gặp tốn hạng (con số biến) push tốn hạng vào ngăn xếp; gặp toán tử, lấy hai tốn hạng khỏi ngăn xếp (stack), tính kết quả, đẩy kết trở lại ngăn xếp Khi trình kết thúc số cuối cịn lại ngăn xếp giá trị biểu thức 1.2:Lý thuyết logic dùng để tính bảng chân trị Trạng thái logic: trạng thái thực thể Xét mặt logic thực thể tồn hai trạng thái Thí dụ, bóng đèn ta quan tâm trạng thái nào: tắt hay cháy Vậy tắt / cháy trạng thái logic Biến logic(mệnh đề): người ta biểu diễn biến logic ký hiệu nhận giá trị Giả sử ta có mệnh đề P Q ta suy phép toán sau: PHÉP PHỦ ĐỊNH Phủ địnhcủa mệnh đề P ký hiệu ~P, mệnh đề định bởi: ~P ↔ P sai Bảng chân trị: P ~P Phép nối liền (hội,giao) Phép nối liềncủa mệnh đề P Q ký hiệu P ^ Q, mệnh đề định P ^ Q ↔ P Qđồng thời lOMoARcPSD|9242611 Bảng chân trị: P Q P^Q 0 0 1 0 1 Phép nối rời (tuyển,hợp) Phép nối rời mệnh đề P Q ký hiệu P VQ, mệnh đề định bởi: P VQsai ↔ P Qđồng thời sai Bảng chân trị: P Q PVQ 0 0 1 1 1 Phép kéo theo Mệnh đề P kéo theoQ mệnh đề P Q, kí hiệu P→Qlàmệnh đề định P→Qsai↔ Pđúng Qsai Bảng chân trị: P Q P→Q 0 1 1 0 1 Phép kéo theo chiều Mệnh đề P kéo theo Q ngược lại hai mệnh đề P Q, ký hiệu P↔Qlà mệnh đề định P↔Qđúng↔ P Q có chân trị Bảng chân trị: P Q P↔Q 0 1 0 1 lOMoARcPSD|9242611 Chương 3: Thực nghiệm Ex1:Infix= R|(P&Q) Các bước làm Ta tạo mảng postfix stack Ta duyệt phần tử Infix Phần tử R nên ta đẩy vào postfix=[‘R’] Tiếp theo tốn tử’|’ ta đẩy vào stack=[‘|’].Phần tử “(” nên ta chèn lên vị trí stack=[‘(’,’|’],phần tử P ta đẩy vào postfix=[‘R’,’P’].Phần tử toán tử ‘&’ độ ưu tiên & h1=’Q’ ta gán giá trị True False từ bảng chân trị cho mệnh để Q.Tương tự với h2 ta có giá trị True False cho mệnh đề P ta có giá trị cho mệnh đề ta bắt đầu tính tốn với tốn tử ‘&’ Ta lưu giá lOMoARcPSD|9242611 trị mệnh đề biến a1 a2 Sau ta chạy vịng for tính tốn Vòng for làm sau tạo mảng lồng với tuple a b a chạy zip(a1,a2) hàm zip để giúp biến chạy song song với để tạo kết thành cột Sau tính xong lưu kết vào Trutable Sau lưu vào phải lưu vào stack số thứ tự cột vừa tính để lấy làm phép tính sau.Ta tạo giá trị cho mệnh đề P sau sử dụng số thứ tự cột cuối để lấy kết cột thơng qua đoạn code sau: Ta lưu giá trị P a2 giá trị cột thứ a1 Ta sử dụng a1 a2 để tính tương tự tính ‘&’ Sau lưu kết vào bảng Truthtable Thế ta tính tốn xong ví dụ Ex2:Infix= ~P|(Q&R)>R Đầu tiên ta tạo mảng postfix stack Ta duyệt phần từ infix vòng for Phần tử P nên ta đẩy vào postfix=[‘P’].Phần tử toán tử ‘~’ ta chèn vào vị trí số stack=[‘~’].Phần tử toán tử ‘|’ độ ưu tiên ‘~’< độ ưu tiên ‘|’nên ta đẩy ‘~’vào postfix=[‘P’,’~’] lúc stack hết toán hạng nên ta dừng dòng while đẩy ‘|’ vào stack=[‘|’].Ta duyệt tiếp infix ta ‘(’ lúc ta đẩy ‘(’ vào vị trí stack=[‘(’,’|’].Tiếp tới phần tử Q ta đẩy vào postfix=[‘P’,’~’,’Q’].Tiếp theo tốn tử ‘&’ ‘&’ có độ ưu tiên nhỏ ‘(’ nên ta đẩy ‘&’vào vị trí stack=[‘&’,’(’,’|’] Tiếp theo R nên ta đẩy vào postfix=[‘P’,’~’,’Q’,’R’].Tiếp theo ngoặc ‘)’ báo hiệu cho kết thúc biểu thức Ta cho gán biến temp=’&’ có giá trị đầu stack, temp có giá trị toán tử nên ta đẩy vào postfix=[‘P’,’~’,’Q’,’R’,’&’] gán biến temp=’(’ giá trị stack temp khơng phải tốn tử nên vịng lặp while.Ta tiếp tục duyệt Infix ta ‘>’ toán tử ‘>’>’|’ nên ta đẩy ‘|’vào postfix=[‘P’,’~’,’Q’,’R’,’&’,’|’] đẩy ‘>’ vào stack=[‘>’].Tiếp theo ta duyệt phần tử cuối ta toán hạng R ta đẩy vào postfix=[‘P’,’~’,’Q’,’R’,’&’,’|’,’R’] Duyệt hết phần tử ta khỏi vịng lặp Bắt đầu lOMoARcPSD|9242611 đưa phần tử lại stack vào postfix vòng for ta thu postfix=[‘P’,’~’,’Q’,’R’,’&’,’|’,’R’,’>’] Ta xong phần chuyển đổi sang postfix Phần phần tính tốn Ta tạo mảng Cha stack Ta duyệt phần tử postfix thấy mệnh đề ta bỏ vào mảng Cha.Sau ta cài đặt list Cha sang set Cha.Tiếp theo ta xếp chúng theo thứ tự.Khi ta có Cha={‘P’,’Q’,’R’}.tiếp theo sau ta tạo bảng chân trị cách : Tiếp theo sau ta tạo mảng Ope=['~','&','|','>','='] chứa tốn tử theo thứ tự sau ta chạy vịng lặp duyệt phần tử postfix Phần tử ‘P’ nằm Cha nên ta bỏ vào stack=[‘P’] Tiếp theo tốn tử ‘~’ nên ta gán giá trị True False cho P bảng chân trị phía ta lưu kết a1 sau ta tính phủ định a Ta lưu kết sau tính ta lưu vào Truthtable ta tính số thứ tự cột kết mà vừa tính lưu vào stack=[3].Tiếp đến ‘Q’ ta lưu vào stack=[3,’Q’].Tiếp đến ‘R’ ta lưu vào stack=[3,’Q’,’R’] Tiếp theo dấu ‘&’ ta lấy R từ stack gán giá trị True False cho R lưu vào a1,tiếp theo với Q ta lưu vào a2, sau ta thực phép tính ‘&’ Vòng for làm sau tạo mảng lồng với tuple a b a chạy zip(a1,a2) hàm zip để giúp biến chạy song song với để tạo kết thành cột lOMoARcPSD|9242611 Sau tính xong lưu kết vào Trutable Sau lưu vào phải lưu vào stack=[3,4] số thứ tự cột vừa tính để lấy làm phép tính sau.Tiếp theo ‘|’ta lấy kết cột kết cột để tính Để lấy kết từ cột ta thực đoạn code sau h1 gán giá trị đầu stack a[4] tức cột thứ Truthtable, tương tự với h2 ta có giá trị a1 a2 kết cột sau ta thực phép tốn ‘|’ tương tự tính ‘&’ kết sau tính lưu vào Truthtable cịn số thứ tự cột lưu vào stack=[4] Tiếp theo ‘R’ ta lưu vào stack=[4,’R’] cuối ‘>’ ta gán giá trị cho R cách làm sau ta lấy kết cột thứ theo cách tính ‘>’ sau tính xong ta lưu kết vô Truthtable thứ tự cột kết vừa tính vào stack Duyệt hết phần tử tốn khỏi vịng lặp trả kết Thế tính xong Ex2 Chương 4: Kết lOMoARcPSD|9242611 lOMoARcPSD|9242611 Downloaded by tran quang (quangsuphamhoak35@gmail.com) lOMoARcPSD|9242611 TÀI LIỆU THAM KHẢO Tiếng việt https://www.youtube.com/watch?v=R1z8oPkqglM&feature=youtu.be https://miracleandeffort.wordpress.com/2016/05/07/thuat-toan-tinh-bieuthuc-bang-phuong-phap-chuyen-doi-ba-lan-nguoc/ Tài liệu mơn tốn rời rạc trường ĐH Khoa Học Tự Nhiên Downloaded by tran quang (quangsuphamhoak35@gmail.com) ... Chuyển biểu thức logic từ infix sang postfix Ngày 6/11/2019 xem lý thuyết bảng chân trị, cách vẽ bảng chân trị ngôn ngữ Python Ngày 7/11/2019 tiến hành code tính tốn biểu thức logic bảng chân... vào postfix Ta postfix= [‘R’,’P’,’Q’,’&’,’|’] Tiếp theo tính tốncác biểu thức logic Ta tạo mảng Cha stack Ta duyệt phần tử postfix thấy mệnh đề ta bỏ vào mảng Cha.Sau ta cài đặt list Cha sang. .. tử lại stack vào postfix vòng for ta thu postfix= [‘P’,’~’,’Q’,’R’,’&’,’|’,’R’,’>’] Ta xong phần chuyển đổi sang postfix Phần phần tính tốn Ta tạo mảng Cha stack Ta duyệt phần tử postfix thấy mệnh