1. Trang chủ
  2. » Luận Văn - Báo Cáo

Nghiên cứu cài đặt chương trình chuyển một biểu thức ở dạng trung tố sang dạng ký pháp hậu tố ký pháp đảo ba lan

17 8 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

Định dạng
Số trang 17
Dung lượng 326,78 KB

Nội dung

TRƯỜNG ĐẠI HỌC KINH TẾ QUỐC DÂN VIỆN CÔNG NGHỆ THÔNG TIN – KINH TẾ **************************** BÀI TẬP LỚN NGUYÊN LÝ NGƠN NGỮ LẬP TRÌNH ên uy Ch Đề tài: Nghiên cứu cài đặt chương trình chuyển biểu thức dạng trung tố sang dạng ký pháp hậu tố (Ký pháp đảo Ba Lan) đề Họ tên: Trần Quang Khải ự th Mã sinh viên: 11146120 c Lớp tín chỉ: Ngun lý ngơn ngữ lập trình(216)_1 p tậ p iệ gh tn Tố Hà Nội, Năm 2017 MỤC LỤC LỜI MỞ ĐẦU NỘI DUNG Chương I: CƠ SỞ LÝ THUYẾT VỀ KÝ PHÁP BA LAN .4 1.1 Ký pháp Ba Lan 1.2 Ký pháp nghịch đảo Ba Lan 1.3 Các phương pháp biểu diễn phép toán hai Chương II: CẤU TRÚC DỮ LIỆU NGĂN XẾP (STACK) 2.1 Giới thiệu Ngăn xếp (Stack) 2.2 Biểu diễn cấu trúc liệu ngăn xếp (Stack) 2.3 Các hoạt động cấu trúc liệu ngăn xếp Chương III: ỨNG DỤNG STACK ĐỂ CHUYỂN BIỂU THỨC TỪ DẠNG TRUNG TỐ SANG HẬU TỐ 3.1 Xây dựng phép dịch biểu thức trung tố sang dạng hậu tố 3.2 Giải thuật dịch biểu thức dạng ký pháp trung tố sang biểu thức dạng ký pháp hậu tố Chương IV: CÀI ĐẶT CHƯƠNG TRÌNH TRÊN NGƠN NGỮ LẬP TRÌNH C 12 4.1 Viết chương trình 12 Test chương trình 14 ên uy 4.3 Ch 4.2 Định hình 12 KẾT LUẬN 16 Tài liệu tham khảo: 17 đề c ự th p tậ p iệ gh tn Tố LỜI MỞ ĐẦU Ký pháp Ba lan (Polish notation), gọi ký pháp tiền tố (Prefix notation), cách viết biểu thức đại số thuận lợi cho việc thực phép toán Đặc điểm cách viết không cần dùng đến dấu ngoặc thực từ trái sang phải Mục đích đề tài nhằm giới thiệu sở lý thuyết ký pháp nghịch đảo Ba Lan, thuật toán chuyển biểu thức từ dạng trung tố sang hậu tố cài đặt chương trình ngơn ngữ lập trình C Chương 1: Cơ sở lý thuyết ký pháp Ba Lan Chương 2: Cấu trúc liệu Ngăn xếp (Stack) Chương 3: Ứng dụng Stack để chuyển biểu thức từ dạng trung tố sang hậu tố Chương 4: Cài đặt chương trình ngơn ngữ lập trình C ên uy Ch đề c ự th p tậ p iệ gh tn Tố NỘI DUNG Chương I: CƠ SỞ LÝ THUYẾT VỀ KÝ PHÁP BA LAN 1.1 Ký pháp Ba Lan Ký pháp Ba lan (tiếng Anh: Polish notation), gọi ký pháp tiền tố (tiếng Anh: prefix notation), cách viết biểu thức đại số thuận lợi cho việc thực phép toán Đặc điểm cách viết không cần dùng đến dấu ngoặc thực từ trái sang phải Jan Łukasiewicz Ch Kí pháp Ba Lan nhà logic toán Jan Łukasiewicz đề xuất khoảng năm 1920 Jan Łukasiewicz nhà toán học người Ba Lan Ông sinh Lwów, Galicia (nay Lviv, Ukraina) Lĩnh vực nghiên cứu ơng logic tốn ên uy Khi lập trình, tính giá trị biểu thức tốn học điều q đỗi bình thường Tuy nhiên, nhiều ứng dụng (như chương trình vẽ đồ thị hàm số chẳng hạn, chương trình cho phép người dùng nhập vào hàm số), ta cần phải tính giá trị biểu thức nhập vào từ bàn phím dạng chuỗi Với biểu thức tốn học đơn giản (như a+b) bạn tự làm phương pháp tách chuỗi “thủ cơng” Nhưng để “giải quyết” biểu thức có dấu ngoặc, ví dụ (a+b)*c + (d+e)*f ,  phương pháp tách chuỗi đơn giản không khả thi Trong tình này, ta phải dùng đến Ký Pháp Nghịch Đảo Ba Lan (Reserve Polish Notation – RPN), thuật tốn “kinh điển” lĩnh vực trình biên dịch đề c ự th p tậ p iệ gh tn Tố 1.2 Ký pháp nghịch đảo Ba Lan Cách trình bày biểu thức theo cách thơng thường tự nhiên với người lại “khó chịu” máy tính khơng thể cách tường minh q trình tính tốn để đưa giá trị biểu thức Để đơn giản hóa q trình tính tốn này, ta phải biến đổi lại biểu thức thông thường dạng hậu tố - postfix (cách gọi ngắn thuật ngữ ký pháp nghịch đảo Ba Lan) Để phân biệt hai dạng biểu diễn biểu thức, ta gọi cách biểu diễn biểu thức theo cách thông thường trung tố - infix (vì tốn tử nằm hai toán hạng) Ký pháp nghịch đảo Ba Lan phát minh vào khoảng thập kỷ 1950 Charles Hamblin - triết học gia khoa học gia máy tính người Úc - dựa theo cơng trình ký pháp Ba Lan nhà Toán học người Ba Lan Jan Łukasiewicz Hamblin trình bày nghiên cứu hội nghị khoa học vào tháng năm 1957 thức cơng bố vào năm 1962 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 lại thành + Q trình tính tốn giá trị biểu thức hậu tố tự nhiên máy tính 1.3 Các phương pháp biểu diễn phép tốn hai ngơi Một phép tốn hai ngơi tập hợp X ánh xạ f: X×X→X cho Ánh xạ f thường ký hiệu *, gọi toán tử, phần tử a, b gọi hạng tử (cịn gọi tốn hạng) ên uy Ch Biểu thức trung tố hiểu đơn giản tức toán tử đặt hai toán hạng, dĩ nhiên phải tốn tử hai ngơi Vậy dựa vào vị trí của tốn tử, liệu ta biểu diễn biểu thức đại số dạng khác? Câu trả lời được, nói, ta có ba cách biểu thức tiền tố (prefix), trung tố (infix) hậu tố (postfix) đề  Prefix: Biểu thức tiền tố biểu diễn cách đặt toán tử lên trước toán hạng Cách biểu diễn biết đến với tên gọi “ký pháp Ba Lan” nhà toán học Ba Lan Jan Łukasiewicz phát minh năm 1920 Với cách biểu diễn này, thay viết x+y dạng trung tố, ta viết +xy Tùy theo độ ưu tiên toán tử mà chúng xếp khác nhau, bạn xem số ví dụ phía sau phần giới thiệu ự th c  Postfix: Ngược lại với cách Prefix, tức toán tử đặt sau toán hạng Cách biểu diễn gọi “ký pháp nghịch đảo Ba Lan” viết tắt RPN (Reverse Polish notation), phát minh vào khoảng thập kỷ 1950 triết học gia nhà khoa học máy tính Charles Hamblin người Úc p tậ p iệ gh tn Tố Về lý thuyết, ký pháp tiền tố ký pháp hậu tố cịn mở rộng cho phép tốn ba nhiều mà dùng tới dấu ngoặc để thể độ ưu tiên phép tốn, tương tự với hàm số đa biến, cịn ký pháp trung tố khơng thể Tuy nhiên, thực tế khơng có nhiều phép tốn đa ngơi ký pháp trung tố dùng rộng rãi thói quen Một số ví dụ: Infix Prefix Postfix x+y +xy xy+ x+y-z -+xyz xy+z - x+y*z +x*yz xyz*+ x+(y-z) +x-yz xyz-+ ên uy Ch đề c ự th p tậ p iệ gh tn Tố Chương II: CẤU TRÚC DỮ LIỆU NGĂN XẾP (STACK) 2.1 Giới thiệu Ngăn xếp (Stack) Một ngăn xếp là cấu trúc liệu trừu tượng, sử dụng hầu hết ngơn ngữ lập trình Đặt tên ngăn xếp hoạt động ngăn xếp đời sống thực, ví dụ cỗ hay chồng đĩa, … Trong đời sống thực, ngăn xếp cho phép hoạt động vị trí ngăn xếp Ví dụ, đặt thêm hay đĩa vào ngăn xếp Do đó, cấu trúc liệu trừu tượng ngăn xếp cho phép thao tác liệu vị trí Tại thời điểm nào, truy cập phần tử ngăn xếp Đặc điểm làm cho ngăn xếp trở thành cấu trúc liệu dạng LIFO LIFO viết tắt Last-In-First-Out Ở đây, phần tử đặt vào (được chèn, thêm vào) cuối truy cập Trong thuật ngữ ngăn xếp, hoạt động chèn gọi hoạt động PUSH và hoạt động xóa gọi hoạt động POP 2.2 Biểu diễn cấu trúc liệu ngăn xếp (Stack) Sơ đồ minh họa ngăn xếp hoạt động diễn ngăn xếp ên uy Ch đề c ự th p tậ Tố p iệ gh tn Một ngăn xếp triển khai theo phương thức Mảng (Array), Cấu trúc (Struct), Con trỏ (Pointer) Danh sách liên kết (Linked List) Ngăn xếp dạng kích cỡ cố định ngăn xếp thay đổi kích cỡ Phần triển khai ngăn xếp sử dụng mảng với việc triển khai ngăn xếp cố định 2.3 Các hoạt động cấu trúc liệu ngăn xếp Hoạt động PUSH cấu trúc liệu ngăn xếp : Tiến trình đặt (thêm) phần tử liệu vào ngăn xếp biết đến với tên Hoạt động PUSH Hoạt động push bao gồm bước sau:      Bước 1: kiểm tra xem ngăn xếp đầy hay chưa Bước 2: ngăn xếp đầy, tiến trình bị lỗi Bước 3: ngăn xếp chưa đầy, tăng top để trỏ tới phần nhớ trống Bước 4: thêm phần tử liệu vào vị trí nơi mà top trỏ đến ngăn xếp Bước 5: trả success Hoạt động POP cấu trúc liệu ngăn xếp: Việc truy cập nội dung phần tử xóa từ ngăn xếp cịn gọi Hoạt động POP Trong triển khai Mảng hoạt động pop(), phần tử liệu khơng thực bị xóa, thay vào đó top sẽ bị giảm vị trí thấp ngăn xếp để trỏ tới giá trị Nhưng triển khai Danh sách liên kết, hoạt động pop() thực xóa phần tử xữ liệu xóa khỏi khơng gian nhớ Hoạt động POP bao gồm bước sau:   đề  Bước 1: kiểm tra xem ngăn xếp trống hay khơng Bước 2: ngăn xếp trống, tiến trình bị lỗi thoát Bước 3: ngăn xếp không trống, truy cập phần tử liệu tại top đang trỏ tới Bước 4: giảm giá trị top Bước 5: trả success ên uy  Ch  c ự th tậ p Chương III: ỨNG DỤNG STACK ĐỂ CHUYỂN BIỂU THỨC TỪ DẠNG TRUNG TỐ SANG HẬU TỐ p iệ gh tn Tố 3.1 Xây dựng phép dịch biểu thức trung tố sang dạng hậu tố Gọi ∑ toán hạng, Г toán tử ( + , - , * , / ) dạng ký pháp hậu tố (postfix) định nghĩa sau:   Nếu biểu thức E (Expression) có dạng a ∈ ∑ thì:  Postfix a a Nếu biểu thức E có dạng E1 θ E2 , E1 , E2 biểu thức, cịn θ tốn tử thì:  Postfix E1 θ E2 E ' E ' θ , E ' , E' 2tương ứng postfix E1 , E  Nếu biểu thức E có dạng (E) thì:  Postfix (E) biểu diễn postfix E VD: Cho biểu thức dạng trung tố (infix): (a+b)*c Hãy xác định dạng ký pháp hậu tố (postfix) biểu thức trên? Giải:  Xác định dạng ký pháp Postfix: o Đặt E1 = (a+b), E2 = c, θ = * o Với E1 = (a+b) ta lại đặt: E11 = a, E12 = b, θ = + nên ta có dạng postfix E1 ab+ Do đó, ta có dạng ký pháp Postfix E ab+c* 3.2 Giải thuật dịch biểu thức dạng ký pháp trung tố sang biểu thức dạng ký pháp hậu tố Input: Biểu thức số học dạng infix Ch Output: Biểu thức số học dạng postfix ên uy Phương pháp: Ta sử dụng Stack: S1 lưu trữ toán tử toán hạng, đồng thời lưu ln kết quả, S2 lưu trữ tốn tử đề  Trước hết, toán tử ta gán cho mức ưu tiên (Giá trị số nguyên), toán tử có mức ưu tiên lớn thực trước, tốn tử có mức ưu tiên nhỏ thực sau  Hoạt động: Duyệt biểu thức vào từ trái qua phải thực thao tác sau: o Nếu ký hiệu vào toán hạng ghi vào S1 o Nếu ký hiệu vào tốn tử đố ta phải kiểm tra S2:  Nếu S2 rỗng ghi tốn tử vào S2  Nếu S2 khơng rỗng thì: Ta so sánh mức đọ ưu tiên toán tử theo nguyên tắc sau: Giả sử gọi θ i toán tử xét, θ j toán tử S2 => Xảy trường hợp: Nếu θ i c ự th p tậ p iệ gh tn Tố ≤ θ j đẩy θ j khỏi đỉnh S2, sau tiếp tục lặp θ i > θ j dừng, lúc ghi θ i vào S2; cịn trường hợp khác ta ghi θ i vào S2 o Nếu ký hiệu vào dấu mở ngoặc “(” ta ghi vào S2, sau áp dụng lại thao tác 1,2 gặp dâu ngoặc “)”, có tốn tử nằm cặp dấu ngoặc “(”, “)” phải đẩy hết Khi đẩy hết cặp dấu ngoặc “tự hủy” Lưu ý: Ta sử dụng thêm ký hiệu đặc biệt để đánh dấu kết thúc phải biểu thức có mức ưu tiên nhỏ VD: Mô tả giải thuật dịch biểu thức dạng ký pháp trung tố: a+b*c sang biểu thức dạng ký pháp hậu tố (postfix) Giải: Ta sử dụng stach S1, S2, dấu “;” để đánh dấu kết thúc gán giá trị mức ưu tiên cho toán tử dấu “;” bảng sau: Ta có hoạt động giải thuật sau: ên uy Ch đề c ự th p tậ p iệ gh tn Tố 10 ên uy Ch đề c ự th p tậ p iệ gh tn Tố 11 Chương IV: CÀI ĐẶT CHƯƠNG TRÌNH TRÊN NGƠN NGỮ LẬP TRÌNH C 4.1 Định hình Chương trình giúp chuyển biểu thức từ dạng trung tố sáng dạng hậu tố Với biểu thức trung tố nhập vào kết biểu thức hậu tố tương ứng 4.2 Viết chương trình ên uy Ch đề c ự th p tậ p iệ gh tn Tố 12 ên uy Ch đề c ự th p tậ p iệ gh tn Tố 13 4.3 Test chương trình ên uy Ch Nhập vào biểu thức (a+b)*c/d+e đề c ự th p tậ p iệ gh tn Tố 14 Kết quả: ab+c*d/e+ ên uy Ch đề c ự th p tậ p iệ gh tn Tố 15 KẾT LUẬN Đến kết thúc việc bàn luận nghiên cứu cài đặt chương trình chuyển biểu thức dạng trung tố sang dạng ký pháp hậu tố (ký pháp đảo ba lan) Qua trình nghiên cứu đề tài, em nhận số kết sau: Hiểu rõ ký pháp Ba Lan, nghịch đảo Ba Lan Nắm bắt giải thuật chuyển biểu thức từ dạng trung tố sang hậu tố Cài đặt thành cơng thuật tốn ngơn ngữ lập trình C Đề tài cịn nhiều sai sót, em mong thầy bạn đóng góp ý kiến để hồn thiện tốt đề tài Em xin chân thành cảm ơn! ên uy Ch đề c ự th p tậ p iệ gh tn Tố 16 Tài liệu tham khảo: Bài giảng Nguyên lý ngơn ngữ lập trình - ThS Lưu Minh Tuấn - Bộ môn CNTT Viện CNTTKT - ĐHKTQD Viết chương trình tính giá trị biểu thức – Tác giả: Đặng Nhật Anh – Diễn đàn: caulacbovb.com Các nguồn khác Internet ên uy Ch đề c ự th p tậ p iệ gh tn Tố 17

Ngày đăng: 23/11/2023, 14:28

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

TÀI LIỆU LIÊN QUAN

w