Thuật toán tính giá trị của một biểu thức biểu diễn dưới dạng tiền tố hoặc hậu tố

15 5.6K 3
Thuật toán tính giá trị của một biểu thức biểu diễn dưới dạng tiền tố hoặc hậu tố

Đ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

Lý Thuyết Đồ Thị Giáo viên: Ts Trần Hành Nhóm 1 Lớp 07CT113 1 Mục lục: Đề tài và Phân công công việc…………………… …………………… trang Chương 1: Khái Niệm Cơ Bản…………………………………………… trang 1.1.Khái niệm ký pháp tiền tố, trung tố, hậu tố……… trang 1.2.Cây biểu diễn biểu thức………………………………….trang Chương 2: Phân tích bài toán………………………………………………trang 2.1.Mục đích…………………………………………………trang 2.2.Giải thuât…………………………………………………trang 2.2.1.Đưa một biểu thức số học có chứa các phép toán +,-,*,/,^ về dạng trung tố, tiền tố, hậu tố…………………………………trang 2.2.2- Thuật toán tính giá trị của một biểu thức biểu diễn dưới dạng tiền tố hoặc hậu tố……………………………………………trang Chương 3: Xây Dựng Chương Trình……………………………………….trang 3.1- Hàm kiểm tra biểu thức nhập vào……………………….trang 3.2- Chuyển một biểu thức dưới dạng trung tố sang tiền tố…trang 3.3- Chuyển một biểu thức dưới dạng trung tố sang hậu tố…trang 3.4. Tính giá trị của biểu thức dưới dạng tiền tố…………….trang 3.5. Tính giá trị của biểu thức dưới dạng hậu tố…………….trang Chương 4: Kết Quả……………………………………………………… trang Chương 5 : Tài Liệu Tham Khảo………………………………………… trang Giới Thiệu Lý Thuyết Đồ Thị Giáo viên: Ts Trần Hành Nhóm 1 Lớp 07CT113 2 Đề tài : . - Ký pháp trung tố, tiền tố, hậu tố - Đưa một biểu thức số học có chứa các phép toán +,-,*,/,^ về dạng trung tố, tiền tố, hậu tố. - Biểu diễn biểu thức bằng cây nhị phân - Tinh giá trị của biểu thức dưới dạng tiền tố , hậu tố. Phân công công việc: Phạm Quang Huy : Thiết kế form , bẫy lổi, làm word. Nguyễn Thị Thanh Trúc : Tìm hiểu và làm phần chuyển từ trung tố sang hậu tố. Đới Sỹ Đức: Tìm hiểu và làm phần chuyển từ trung tố sang tiền tố. Hoàn Khai Nguyên: Tìm hiểu và làm phần tính toán biểu thức tiền tố. Nguyễn Thị Nữ Việt: Tìm hiểu và làm phần tính toán biểu thức hậu tố. Chương 1: Khái Niệm Cơ Bản 1.1khái niệm ký pháp trung tố, tiền tố, hậu tố:  Là các phương pháp biểu diễn phép toán hai ngôi  Một phép toán hai ngôi trên tập hợp X là một ánh xạ f: X×X → X cho (a,b) f(a,b) A. Ánh xạ f khi đó thường được ký hiệu bởi *, được gọi là toán tử, các phần tử a, b được gọi là các hạng tử (còn gọi là toán hạng). Lý Thuyết Đồ Thị Giáo viên: Ts Trần Hành Nhóm 1 Lớp 07CT113 3  Khi viết biểu thức biểu diễn phép toán đó ta có thể đặt ký hiệu toán tử ở trước (ký pháp tiền tố), sau (ký pháp hậu tố) hoặc giữa (ký pháp trung tố) các toán hạng.  Thông thường trong các biểu thức đại và số học, ta viết ký hiệu phép toán giữa hai hạng tử, đó là ký pháp trung tố. Ví dụ: a + b, a * b, Khi một biểu thức có nhiều phép toán, ta dùng các cặp dấu ngoặc "(", ")" và thứ tự ưu tiên các phép toán để chỉ rõ thứ tự thực hiện các phép toán. (Các phép toán đều quy về phép toán 2 ngôi.)  Ta cũng có thể viết hai hạng tử trước và kí hiệu toán tử sau ( ký pháp hậu tố hay còn gọi là ký pháp BaLan đảo). Chẳng hạn: Ví dụ: a + b viết là a b +; a * b viết là a b *  Cũng có thể viết toán tử trước, hai toán hạng sau ( ký pháp tiền tố hay còn gọi là ký pháp BaLan ). Chẳng hạn: Ví dụ: a + b viết là + a b; a * b viết là * a b  Về lý thuyết, ký pháp tiền tố và ký pháp hậu tố còn có thể được mở rộng cho các phép toán ba ngôi hoặc nhiều hơn mà vẫn không phải dùng tới dấu ngoặc để thể hiện độ ưu tiên các phép toán, tương tự với hàm số đa biến, còn ký pháp trung tố thì không thể. Tuy nhiên, trong thực tế không có nhiều phép toán đa ngôi và ký pháp trung tố vẫn được dùng rộng rãi vì thói quen. Ví dụ: + a b c có thể được hiểu là tổng của 3 số a, b và c trong ký pháp tiền tố. Tương tự, f a b c có thể được hiểu là hàm f của 3 biến a, b và c trong ký pháp tiền tố. 1.2.Cây biểu diễn biểu thức  Dùng cây nhị phân để biểu diển biểu thức có thể thấy rõ hơn về trình tự tính toán biểu thức Lý Thuyết Đồ Thị Giáo viên: Ts Trần Hành Nhóm 1 Lớp 07CT113 4  Duyệt cây nhị phân trong hình trên theo trung thứ tự là: a + b  c  d / 2  Duyệt cây theo tiền thứ tự ta sẽ có:  + a b  c / d 2  Duyệt cây theo hậu thứ tự ta sẽ có: Lý Thuyết Đồ Thị Giáo viên: Ts Trần Hành Nhóm 1 Lớp 07CT113 5 a b + c d 2 /    Với cách duyệt theo trung thứ tự bỏ các dấu ngoặc như trên sẽ gây ra sai lệch trong việc tính toán biểu thức. Vì biểu thức a + b * c – d / 2 có thể hiểu theo nhiều cách a + (b*c-d) / 2 hay a + (b * c) – d / 2 .  Còn với cách duyệt theo tiền thứ tự hay hậu thứ tự sẽ chỉ xác định được một biểu thức duy nhất (a + b) * (c-(d/2)) Vì vậy khi tính toán một biểu thức toán học bất kỳ, ta sẽ đưa biểu thức toán học về dạng tiền tố hoặc hậu tố để dể tính toán. Chương 2: phân tích bài toán 2.1.Mục đích: Lý Thuyết Đồ Thị Giáo viên: Ts Trần Hành Nhóm 1 Lớp 07CT113 6 2.1.1.Đưa một biểu thức số học có chứa các phép toán +,-,*,/,^ về dạng trung tố, tiền tố, hậu tố. 2.1.2.Biểu diễn giá trị của biểu thức bằng cây nhị phân. 2.1.3.Tính giá trị của biểu thức dưới dạng tiền tố, hậu tố. 2.2. Giải thuật 2.2.1.Đưa một biểu thức số học có chứa các phép toán +,-,*,/,^ về dạng trung tố, tiền tố, hậu tố  Việc tính giá trị một biểu thức viết dưới dạng phép toán sau rất thuận tiện như trên, tuy nhiên, theo thói quen thông thường, việc nhập biểu thức đó vào lại không dễ, người ta thường nhập vào một công thức dưới dạng thông thường (phép toán giữa) rồi dùng chương trình chuyển đổi nó sang dạng phép toán sau. Chúng ta hãy xét biểu thức trong ví dụ trên Q=a*(b+c)-d^5  Kí hiệu biểu thức ghi dưới dạng phép toán sau là P. Trong quá trình chuyển đổi ta dùng một stack S để lưu các phần tử trong P chưa sử dụng đến. Khi đọc từ trái sang phải biểu thức Q la lần lượt có: 1. Đọc và ghi nhận giá trị a, ghi giá trị a vào P. Vậy P = "a". 2. Đọc toán tử "*". Đưa toán tử này vào stack S: S = "*" 3. Đọc dấu ngoặc mở "(", đưa dấu ngoặc này vào stack: S = "*(". 4. Đọc hạng tử b, đưa b vào P: P= "a b" 5. Đọc toán tử "+", đặt "+" vào stack: S ="*(+" 6. Đọc hạng tử "c", đưa c vào cuối P: P="a b c" 7. Đọc dấu ngoặc đóng ")". Lần lượt lấy các toán tử ở cuối stack ra khỏi stack đặt vào cuối P cho đến khi gặp dấu ngoặc mở "(" trong stack thì giải phóng nó: S= "*"; P="a b c +" 8. Đọc toán tử "-". Cuối stack S có toán tử "*" có mức ưu tiên lớn hơn toán tử "-", ta lấy toán tử "*" ra khỏi stack, đặt vào cuối P, đặt toán tử "-" vào stack: S="-"; P=" a b c + * " 9. Đọc hạng tử d, đưa d vào cuối P. P="a b c + * d" Lý Thuyết Đồ Thị Giáo viên: Ts Trần Hành Nhóm 1 Lớp 07CT113 7 10. Đọc toán tử "^", đưa toán tử "^" vào cuối stack: S="-^" 11. Đọc hằng số 5, đưa 5 vào cuối P: P="a b c + * d 5"  Đã đọc hết biểu thức Q, lần lượt lấy các phần tử cuối trong stack đặt vào P cho đến hết. P="a b c + * d 5 ^ -".  Thuật toán chuyển từ ký pháp trung tố sang ký pháp tiền tố hoặc hậu tố rất gần với cách xử lý các phép tính trong máy tính bấm tay (hay máy tính bỏ túi). Một biểu thức chỉ gồm các phép toán hai ngôi bất kỳ luôn có thể được tính bằng máy tính bấm tay mà không cần dùng dấu ngoặc. Các phép toán ở trước nếu có độ ưu tiên (ưu tiên bởi toán tử hoặc bởi dấu ngoặc) thấp hơn một phép toán ở sau được đẩy vào một hàng chờ (stack), chỉ khi nào các phép toán ưu tiên hơn ở sau được tính xong, các phép toán ở trước mới được xử lý. 2.2.2- Thuật toán tính giá trị của một biểu thức biểu diễn dưới dạng tiền tố hoặc hậu tố. Thuật toán: biểu thức đưa vào là gồm n ký hiệu chứa các ký hiệu số hoặc ký hiệu toán học, được biểu diển dưới dạng hậu tố ( Tương tự tiền tố) Ấn định k =1  Khảo sat ký hiệu thứ k. Nếu là biến, thì đưa vào ngăn xếp. Ngược lại, nếu là toán tử thì thì lấy hai khoản mục ra khỏi ngăn xếp, thực hiện phép toán rồi đưa trở lại ngăn xếp.  Nếu k = n thì thuật toán chấm dứt và đáp số cuối cùng nằm trên ngăn xếp, ngược lại thì k tăng thêm 1 và lặp lại bước 2 Ví dụ: Tính biểu thức ( 8 + 2 * 5 ) / ( 1 + 3 * 2 – 4 ) Chuyển về công thức hậu tố: 8 2 5*+1 3 2*+4-/ Lý Thuyết Đồ Thị Giáo viên: Ts Trần Hành Nhóm 1 Lớp 07CT113 8 Bước 1 2 3 4 5 6 7 8 9 10 11 12 13 8 2 5 * + 1 3 2 *- 4 - / 2 5 * + 1 3 2 * + 4 - / 5 * + 1 3 2* + 4 - / * + 1 3 2* + 4 - / + 1 3 2* + 4 - / 1 3 2* + 4 - / 3 2* + 4 - / 2* + 4 - / * + 4 - / + 4 - / 4 - / - / / Lưu 8 vào Stack Lưu 2 vào Stack Lưu 5 vào Stack Thực hiện 2*5 =10 lưu 10 vào Stack Thực hiện 10 + 8 = 18 lưu 18 vào Stack Lưu 1 vào Stack Lưu 3 vào Stack Lưu 2 vào Stack Thực hiện 3 * 2 = 6 lưu 6 vào Stack Thực hiện 1 + 6 = 7 lưu 7 vào Stack Lưu 4 vào Stack Thực hiện 7 – 4 = 3 lưu 3 vào Stack Thực hiện 18/3 = 6 lưu vào Stack ( Kết quả cuối ) Chương 3: Xây Dựng Chương Trình 8 8 8 8 18 18 18 18 18 18 18 18 6 2 2 10 1 1 1 1 7 7 3 5 3 3 6 4 2 1 2 3 4 5 6 7 8 9 10 11 12 1 3 Các bước thực hiện khi tính toán biểu thức BaLan Ngăn xếp theo các bước tương ứng Lý Thuyết Đồ Thị Giáo viên: Ts Trần Hành Nhóm 1 Lớp 07CT113 9 Ngôn ngữ sử dụng : Visual Basic 2005 3.2- Hàm kiểm tra độ ưu tiên của các phép toán Private Function KiemTra(ByVal a As Char) Select Case a Case "0" To "9" KiemTra = 1 Case "+", "-", "*", "/", "(", ")", "^" KiemTra = 2 Case Else KiemTra = 0 End Select End Function Private Function xetdau(ByVal a As Char) Select Case a Case "*", "/", "^" xetdau = 1 Case "-" xetdau = 2 Case "+" xetdau = 3 Case Else xetdau = 0 End Select End Function 3.2- Chuyển một biểu thức dưới dạng trung tố sang tiền tố Private Function TienTo() Lý Thuyết Đồ Thị Giáo viên: Ts Trần Hành Nhóm 1 Lớp 07CT113 10 Dim S As New Stack Dim len As Integer Dim P As String = String.Empty Dim N As Char() = tx1.Text.ToCharArray Dim i As Integer len = tx1.Text.Length - 1 For i = len To 0 Step -1 If KiemTra(N(i)) = 1 Then P = N(i) + P End If If KiemTra(N(i)) = 2 Then P = " " + P If N(i) <> "(" Then If S.Count = 0 Then S.Push(N(i)) Else If xetdau(S.Peek) > xetdau(N(i)) Then S.Push(N(i)) Else If S.Peek = ")" Then S.Pop() Else P = S.Pop + P End If S.Push(N(i)) End If End If Else While S.Count <> 0 [...]... Thị Giáo viên: Ts Trần Hành If (S.Peek ")") Then P = S.Pop + P Else S.Pop() Exit While End If End While End If End If Next While S.Count 0 P = S.Pop + P End While 'xoa khoang trang du i=1 While i < P.Length - 2 If P(i) = " " Then If KiemTra(P(i + 1)) 1 Or KiemTra(P(i - 1)) 1 Then P = P.Remove(i, 1) i -= 1 End If End If i += 1 End While TienTo = P S.Clear() 3.4 Tính giá trị của biểu thức dưới. .. 07CT113 12 Lý Thuyết Đồ Thị Giáo viên: Ts Trần Hành Return 0 End Select End If Next TinhTienTo = s1.Pop s1.Clear() End Function Chương 4: Kết Quả Nhóm 1 Lớp 07CT113 13 Lý Thuyết Đồ Thị Giáo viên: Ts Trần Hành Chương 5 : Tài Liệu Tham Khảo 1 Cấu Trúc Máy Tính Cơ Bản Tổng hợp và biên dịch : VN-GUIDE Nhà xuất bản thống kê Nhóm 1 Lớp 07CT113 14 Lý Thuyết Đồ Thị Giáo viên: Ts Trần Hành 2 Giáo trình lý thuyết đồ... 1 Or KiemTra(P(i - 1)) 1 Then P = P.Remove(i, 1) i -= 1 End If End If i += 1 End While TienTo = P S.Clear() 3.4 Tính giá trị của biểu thức dưới dạng tiền tố Private Function TinhTienTo(ByVal str As String) Nhóm 1 Lớp 07CT113 11 Lý Thuyết Đồ Thị Giáo viên: Ts Trần Hành Dim s1 As New Stack Dim ViTri As Integer = str.Length - 1 For i As Integer = str.Length - 2 To 0 Step -1 If str(i) = " " Or KiemTra(str(i))... Cơ Bản Tổng hợp và biên dịch : VN-GUIDE Nhà xuất bản thống kê Nhóm 1 Lớp 07CT113 14 Lý Thuyết Đồ Thị Giáo viên: Ts Trần Hành 2 Giáo trình lý thuyết đồ thị - Ts Trần Hành Trường Đại Học Lạc Hồng 3 Giáo Trình Toán Rời Rạc Trường Đại Học Sư Phạm Huế Xuất bản vào mùa thu 2003 Nhóm 1 Lớp 07CT113 15 . tố trang 3.3- Chuyển một biểu thức dưới dạng trung tố sang hậu tố trang 3.4. Tính giá trị của biểu thức dưới dạng tiền tố ………….trang 3.5. Tính giá trị của biểu thức dưới dạng hậu tố ………….trang Chương. một biểu thức số học có chứa các phép toán +,-,*,/,^ về dạng trung tố, tiền tố, hậu tố ………………………………trang 2.2.2- Thuật toán tính giá trị của một biểu thức biểu diễn dưới dạng tiền tố hoặc hậu. 2.2.2- Thuật toán tính giá trị của một biểu thức biểu diễn dưới dạng tiền tố hoặc hậu tố. Thuật toán: biểu thức đưa vào là gồm n ký hiệu chứa các ký hiệu số hoặc ký hiệu toán học, được biểu

Ngày đăng: 18/09/2014, 12:21

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

Tài liệu liên quan