1. Trang chủ
  2. » Công Nghệ Thông Tin

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

18 1,4K 4

Đ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 18
Dung lượng 1,79 MB

Nội dung

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

Trang 1

www.themegallery.com

ĐỀ TÀI BÁO CÁO:

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

Trang 2

GIỚI THIỆU CHUNG

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

1.SƠ LƯỢC VỀ THUẬT TOÁN KÍ PHÁP

BA LAN

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

Trang 3

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

Trang 4

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

hai toán hạng.

bằng cách đặt toán tử sau toán hạng

Trang 5

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 đó.

Trang 6

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ả.

Trang 7

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.

Trang 8

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.

Trang 9

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.

Trang 10

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:

Trang 11

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

) Pop đến khi lấy được ),ghi các toán tử Pop được ra kết quả ( + * 6 4 2 6 +

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

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/

Trang 12

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

2 Push 2 6 4 2

6 Push 6 6 4 2 6

+ Tính 2+6 ,Push 8 6 4 8

* Tính 4*8,Push 32 6 32

+ Tính 6+32 38

/ Tính 38/2,Push 19 19

Trang 13

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.

Trang 14

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ố.

Trang 15

CÀI ĐẶT TRÊN C

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.

Trang 16

CÀI ĐẶT TRÊN C

 Một số lưu ý:

Các phép toán mà

chương trình có thể

thực hiện được

Phép toán Biểu diễn Ví dụ

Lũy thừa X^y 2^3 Lũy thừa cơ số e Ex E3 Căn bậc 2x 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 t45

Trang 17

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).

<Dấu trừ không được viết liền sau các toán tử để phân biệt số

â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>

Trang 18

www.themegallery.com

Add your company slogan

Ngày đăng: 01/04/2016, 13:27

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

w