Tải bản đầy đủ (.ppt) (18 trang)

Thuật toán kí pháp ba lan

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (690.87 KB, 18 trang )

LOGO

ĐỀ TÀI BÁO CÁO:
THUẬT TOÁN KÍ PHÁP BA LAN
www.themegallery.com


GIỚI THIỆU CHUNG
1.SƠ LƯỢC VỀ THUẬT TOÁN KÍ PHÁP
BA LAN

2.THUẬT
2.THUẬT TOÁN
TOÁN KÍ
KÍ PHÁP
PHÁP BA
BA LAN
LAN

3.CÀI ĐẶT TRÊN C


SƠ LƯỢC VỀ THUẬT TOÁN KÍ
PHÁP BA LAN
Ký pháp nghịch đảo Ba Lan được phát minh
vào khoảng giữa thập kỷ 1950 bởi Charels
Hamblin-một triết học gia và khoa học gia
máy tính người Úc-dựa theo công trình về ký
pháp Ba Lan của nhà Toán học người Ba Lan
Łukasiewicz.



SƠ LƯỢC VỀ THUẬT TOÁN KÍ
PHÁP BA LAN
 Biểu thức tiền tố (prefix): Được biểu diễn
bằng cách đặt toán tử lên trước toán hạng
 Biểu thức trung tố (infix): Toán tử nằm giữa
hai toán hạng.
 Biểu thức hậu tố (postfix): Được biểu diễn
bằng cách đặt toán tử sau toán hạng


THUẬT TOÁN KÍ PHÁP BA LAN
1. Ý tưởng của bài toán
 Đọc biểu thức từ trái sang phải, nếu gặp
một toán hạng (con số hoặc biến) thì push
toán hạng vào ngăn xếp, nếu gặp toán tử,
lấy hai toán hạng ra khỏi ngăn xếp (stack),
tính kết quả, đẩy kết quả trở lại ngăn xếp.
 Khi quá trình kết thúc con số cuối cùng còn
lại trong ngăn xếp chính là giá trị của biểu
thức đó.


THUẬT TOÁN KÍ PHÁP BA LAN
2.Trình bày thuật toán.
a. Thuật toán chuyển đổi từ trung tố sang hậu tố:
+
+
+


+
+

Nếu gặp một toán hạng (con số hoặc biến) thì ghi nó vào
chuỗi kết quả (chuỗi kết quả là biểu thức trung tố).
Nếu gặp dấu mở ngoặc, đưa nó vào Stack.
Nếu gặp một toán tử (gọi là 01) thực hiện 2 bước sau:
- Nếu có toán tử 02 ở đỉnh ngăn xếp và độ ưu tiên của 01
nhỏ hơn hay bằng độ ưu tiên của 02 thì lấy 02 ra khỏi ngăn
xếp và ghi vào kết quả.
- Push 01 vào ngăn xếp.
Nếu gặp dấu đóng ngoặc thì lấy các toán tử trong ngăn
xếp ra và ghi vào kết quả đến khi lấy được dấu mở ngoặc
ra khỏi ngăn xếp.
Khi đã duyệt hết biểu thức trung tố, lấy lần lượt tất cả các
toán hạng (nếu có) từ ngăn xếp ra và ghi vào chuỗi kết quả.


THUẬT TOÁN KÍ PHÁP BA LAN

b. Thuật toán tính giá trị của biểu thức hậu tố.
+ Lặp qua các Token của biểu thức postfix từ trái
qua phải:
+ Nếu là toán hạng: Push vào Stack.
+ Nếu là toán tử: Pop hai toán hạng trong Stack ra
và tính giá trị của chúng dựa vào toán tử này. Push
kết quả đó lại vào Stack.
+ Phần tử còn sót lại trong Stack sau vòng lặp chính
là kết quả của biểu thức.



THUẬT TOÁN KÍ PHÁP BA LAN
c.Trình bày thuật toán:
- Input: Biểu thức trung tố hợp lệ.
- Output: Giá trị của biểu thức hậu tố.
- Process:
 Thuật toán chuyển từ dạng trung tố sang hậu tố:
+ Khởi động Stack rỗng .
+ While (Không có lỗi và chưa hết biểu thức)
- Đọc Token (Token=hằng/biến/toán tử số học/ngoặc trái/ngoặcphải).
- Nếu Token là:
*) Ngoặc trái: Push vào Stack.
*) Ngoặc phải: Pop và hiển thị các phần tử của Stack đến khi gặp
ngoặc trái.
*) Toán tử: Nếu Stack rỗng hay Token được ưu tiên hơn phần tử ở đỉnh
Stack thì Push vào Stack. Ngược lại Pop và hiên thị một phần tử ở đỉnh
Stack. Lặp lại việc so sánh Token với một phân tử ở đỉnh Stack.
 Toán hạng: hiển thị nó.
 Khi hết biểu thức trung tố: Pop và hiển thị toàn bộ Stack còn lại.


THUẬT TOÁN KÍ PHÁP BA LAN
 Thuật toán tính giá trị biểu thức hậu tố:
+ Khởi động Stack rỗng.
+ Lặp lại các bước sau đến khi hết biểu thức:
- Đọc Token (Hằng/biến/toán tử).
- Nếu Token là:
Toán hạng: Push vào Stack.
Toán tử:
 Pop 2 giá trị

 Áp dụng toán tử cho 2 giá trị lấy ra.
 Push kết quả vào Stack.

-End.


THUẬT TOÁN KÍ PHÁP BA LAN
3. Ví dụ minh họa.
- Input: (6+4*(2+6))/2
- Output: 19.
- Process:
 Chuyển từ biểu thức từ dạng trung tố sang
hậu tố:
Các bước chuyển đổi được thực hiện như
bảng dưới đây:


THUẬT TOÁN KÍ PHÁP BA LAN
Kí tự

Thao tác

Stack

Chuỗi hậu tố

(

Push (


(

6

Ghi 6 vào kết quả

+

Push +

4

Ghi 4 vào kết quả

*

Push *

( +*

(

Push (

(+*(

2

Ghi 2 vào kết quả


+

Push +

6

Ghi 6 vào kết quả

)

Pop đến khi lấy được ),ghi các toán tử Pop được ra kết quả

)

Pop đến khi lấy được ),ghi các toán tử Pop được ra kết quả.

/

Push /

2

Ghi 2 vào kết quả

6426+*+2

Pop tất cả các toán tử ra khỏi ngăn xếp và ghi vào kết quả

6 4 2 6 + * + 2/


6
(+
64

642
( +* (+
6426
(+*

6426+
6426+*+

/


THUẬT TOÁN KÍ PHÁP BA LAN
 Tính giá trị của biểu thức hậu tố:
Quá trình tính toán được diễn ra như bảng dưới đây:
Kí tự

Thao tác

Trạng thái Stack

6

Push 6

6


4

Push 4

64

2

Push 2

642

6

Push 6

6426

+

Tính 2+6 ,Push 8

648

*

Tính 4*8,Push 32

6 32


+

Tính 6+32

38

2

Push 2

38 2

/

Tính 38/2,Push 19

19


CÀI ĐẶT TRÊN C
1.Mô tả cài đặt chương trình:
- Input: Biểu thức số học dạng trung tố.
- Output: Giá trị kết quả của biểu thức dạng hậu tố.
- Process:
- Hàm main: nhập biểu thức vào xâu input, gọi hàm
chuyển đổi ,tính toán đưa kết quả ra màn hình.
- Hàm convert (char *input, char *output): phân tích xâu
biểu thức vào input, chuyển đổi xâu biểu thức ra output
là biểu thức số học ban đầu dưới dạng hậu tố.
+ Duyệt lần lượt các phần tử của xâu input.

+ Bỏ qua khi gặp dấu cách.
+ Nếu là chữ số hoặc dấu chấm (số thực) :đưa vào xâu
output.
+ Gặp dấu mở ngoặc ‘(’ : đẩy vào Stack.


CÀI ĐẶT TRÊN C
+ Gặp dấu cộng ‘+’ hoặc trừ ‘-’ mà đỉnh ngăn xếp là dấu ‘(’
thì đẩy vào, còn không phải là dấu mở ‘(’ thì lấy phần tử
đỉnh ra khỏi ngăn xếp trước, đưa vào xâu output rồi đẩy
vào Stack.
+ Gặp dấu nhân ‘*’ hoặc chia ‘/’: đẩy vào nếu đỉnh không
phải là ‘(’, ‘+’, hoặc ‘-’, lấy phần tử đỉnh ra trước đưa vào
output rồi đẩy vào Stack nếu ngược lại.
+ khi gặp các toán tử lũy thừa ‘^’, căn thức ‘√’, logarit ‘l’,
các hàm lượng giác (sin → ‘s’, cos → ‘c’, tan→’t’): đẩy
vào ngay nếu đỉnh không phải là các toán tử ở trên, lấy
phần tử đỉnh ra trước đưa vào output rồi đẩy vào Stack
nếu ngược lại.
+ Gặp dấu đóng ngoặc ‘)’ :đẩy các phần tử trong ngăn
xếp ra đến khi gặp dấu mở ngoặc ‘(’ đưa vào xâu output.
+ cuối cùng thu được xâu output là biểu thức dạng hậu
tố.


CÀI ĐẶT TRÊN C
- Hàm tính toán (char *bieuthuc): phân tích biểu thức dưới dạng
hậu tố, tính toán giá trị biểu thức theo thuật toán Ba Lan, trả
lại giá trị là kết quả của biểu thức ban đầu.
+ Duyệt xâu chứa biểu thức dạng hậu tố.

+ Duyệt từng phần tử của xâu.
+ Nếu gặp dấu cách thì bỏ qua, nếu phần tử = null thì kết thúc.
+ Gặp chữ số hoặc dấu chấm lưu ra một xâu tạm thời để thực
hiện việc chuyển đổi sang kiểu số thực đây vào Stack.
+ Khi gặp các toán tử 2 ngôi : +, -, *, /, ^: đẩy lần lượt 2 phần tử ở
đỉnh ngăn xếp ra, lưu vào 2 biến tạm thời rôi thực hiện phép
tính.
+ Khi gặp toán tử một ngôi : sin, cos, tan, ln, e^ đẩy phần tử đỉnh
ra lưu vào biến tạm thời rồi tính.
+ Lặp lại quá trình đến khi duyệt hết xâu (Khi ngăn xếp còn duy
nhất một phần tử).
-End.


CÀI ĐẶT TRÊN C
 Một số lưu ý:
Phép toán

Biểu diễn

Ví dụ

x+y

2+4

X-y

7-1


X*y

2*4

chia

x/y

10/2

Lũy thừa

X^y

2^3

Lũy thừa cơ số e

Ex

E3

Căn bậc 2

√x

√25

Logarit tự nhiên


Lnx hoặc lx

120

sin

Sinx hoặc sx

S45

cos

Cosx hoặc cx C30

tan

Tanx hoặc tx

Các phép toán mà
Cộng
chương trình có thểTrừ
thực hiện được nhân

t45


CÀI ĐẶT TRÊN C
 Một số lưu ý:
-


-

Số thực: Ví dụ: 5.3
Số âm: Ví dụ: -5
Các góc trong các hàm lượng giác được tính theo đơn vị
radian.
Có thể sử dụng các dấu đóng mở ngoặc. Ví dụ: (2+5)*5-5.3/
(5.4-7)
Các cách nhập biểu thức sau là không hợp lệ:
→sin-5→ Hợp lệ: sin(-5).
→e-3→ Hợp lệ: e(-3)
→2/-1→ Hợp lệ: 2/(-1).
âm và toán tử ’-’>
→vv7→ Hợp lệ: v(v7).
→lnsin2→ Hợp lệ: ln(sin2).
<Các toán tử một ngôi không được viết liền nhau>.


LOGO

Add your company slogan

www.themegallery.com



Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×