Tính giá trị của biểu thức

Một phần của tài liệu BAI_7_TREE_HUONGDANHOC (Trang 40 - 42)

Khi tính toán giá trị một biểu thức số học thì máy chỉ thực hiện được phép toán với hai toán hạng, nếu biểu thức phức tạp thì biểu thức được chia nhỏ thành các biểu thức trung gian và tính giá trị của các biểu thức trung gian sau đó mới lấy giá trị tìm tiếp. Ví dụ để tính biểu thức 1 + 2 + 4 thì máy tính phải tính 1 + 2 được kết quả là 3 sau rồi mới đem cộng với 4 để ra bằng 7 chứ không thể thực hiện cùng lúc 3 số cộng lại với nhau.

Hình 0.11 Nguyên tắc thực hiện tính toán của máy tính

Khi tổ chức một biểu thức dưới dạng cây nhị phân biểu thức ta có thể nhận thấy mỗi nhánh con của cây mô tả một biểu thức trung gian mà máy tính cần xử lý của biểu thức lớn.

Với cây biểu thức trên, để tính giá trị thì máy phải tính hai biểu thức con (6/2) + 5 và 7 - 4 trước khi làm phép nhân cuối cùng. Tương tự để tính (6/2) + 5 thì máy phải tính 6/2 trước khi đem cộng với 5.

Như vậy việc tính giá trị biểu thức lưu trữ trong cây nhị phân tìm kiếm với nút gốc bắt đầu là Root thì thực hiện như một hàm đệ quy như sau

Value TinhGiaTri( Root ) {

Nếu nút Root không phải là phép toán thì

TinhGiaTri = <giá trị chứa trong nút Root>;

Ngược lại {

x: = TinhGiaTri( nút con trái của Root ); y: = TinhGiaTri( nút con phải của Root ); TinhGiaTri : = x R y

} }

Một biểu thức có 3 dạng biểu diễn khác nhau nhưng việc tính toán giá trị biểu thức dựa trên ký pháp Balan đảo ngược là khoa học hơn cả. Trong những năm đầu 1950, nhà logic học người BaLan đã chứng minh rằng biểu thức hậu tố không cần có dấu ngoặc vẫn có thể tính được một cách đúng đắn bằng cách đọc lần lượt biểu thức từ trái qua phải và dùng một Stack để lưu kết quả trung gian.

Các bước thực hiện tính giá trị biểu thức:

Bước 1: Biểu diễn biểu thức dưới dạng ký pháp Balan đảo ngược,

Bước 2: Khởi tạo một Stack rỗng,

Bước 3: Đọc lần lượt các phần tử của biểu thức theo ký pháp Balan đào ngược từ trái sang phải, với mỗi phần tử tìm được, kiểm tra:

vNếu phần tử là toán hạng (giá trị cụ thể) thì đẩy giá trị vào Stack,

vNếu phần tử là phép toán R thì lấy từ Stack ra hai giá trị y và x, và áp dụng phép toán (R) vào hai giá trị đó và tìm được kết quả “x R y” và đưa vào Stack,

Thực hiện liên tiếp bước 3 đến khi Stack chỉ còn một giá trị là giá trị cuối cùng của biểu thức.

Ví dụ 0.26 Tính giá trị của biểu thức sau

Dạng hậu tố: 6 2 / 5 + 7 4 - *

Đọc Xử lý Stack

6 Đọc được phần tử 6 => Đẩy 6 vào Stack 6

2 Đọc được phần tử 2 => Đẩy 2 vào Stack 6, 2

/ Đọc được phép toán R = ‘/ ‘=> Lấy 2 phần tử từ Stack ó y = 2, x = 6 ó Tính giá trị biểu thức xRy = 6/2 = 3 => Đẩy 3 vào Stack 3 5 Đọc được phần tử 5 => Đẩy 5 vào Stack 3, 5

+ Đọc được phép toán R = ‘+’ => Lấy 2 phần tử từ Stack ó y = 5, x = 3 => Tính giá trị biểu thức xRy = 3 + 5 = 8 => Đẩy 8 vào Stack 8 7 Đọc được phần tử 7 => Đẩy 7 vào Stack 8, 7

4 Đọc được phần tử 4 => Đẩy 4 vào Strack 8,7,4

- Đọc được phép toán R = ‘- => Lấy 2 phần tử từ Stack ó y = 4 và

x = 7 ó Tính xRy = 7 – 4 = 3 => Đẩy 3 vào Stack 8, 3 * Đọc được phép toán R = ‘*’ => Lấy 2 phân tử từ Stack ó y = 3, x

= 8 ó Tính xRy = 8*3 = 24 => Đẩy 24 vào Stack 24 Vậy biểu thức có giá trị là 24

Một phần của tài liệu BAI_7_TREE_HUONGDANHOC (Trang 40 - 42)

Tải bản đầy đủ (PDF)

(42 trang)