Cho biểu thức 2 * (4 + 3) - 5. Hãy viết chương trình để chuyển một biểu thức dạng trung tố sang biểu thức dạng hậu tố với giả sử toán hạng, toán tử trong chuỗi chỉ gồm 1 kí tự. Chạy chương trình trên. Dữ liệu vào: chuỗi biểu thức dạng trung tố...

THỰC HÀNH

Nhiệm vụ 1. Chuyển biểu thức dạng trung tố sang hậu tố

Yêu cầu: Cho biểu thức 2 * (4 + 3) - 5. Hãy viết chương trình để chuyển một biểu thức dạng trung tố sang biểu thức dạng hậu tố với giả sử toán hạng, toán tử trong chuỗi chỉ gồm 1 kí tự.

Chạy chương trình trên.

Dữ liệu vào: chuỗi biểu thức dạng trung tố.

Dữ liệu ra: chuỗi biểu thức dạng hậu tố.


Để chuyển đổi biểu thức từ dạng trung tố sang dạng hậu tố, chúng ta có thể sử dụng ngăn xếp để giải quyết. Dưới đây là đoạn mã Python để thực hiện việc này:

def trung_to_hau_to(bieu_thuc):

    precedence = {'+': 1, '-': 1, '*': 2, '/': 2, '(': 0}

    stack = []

    output = []

   

    for char in bieu_thuc:

        if char.isdigit():  # Nếu là toán hạng (số)

           output.append(char)

        elif char in precedence:  # Nếu là toán tử (+, -, *, /)

           while (stack and stack[-1] != '(' and 

                  precedence[char] <= precedence.get(stack[-1], 0)):

               output.append(stack.pop())

           stack.append(char)

        elif char == '(':  # Nếu là dấu mở ngoặc '('

           stack.append(char)

        elif char == ')':  # Nếu là dấu đóng ngoặc ')'

           while stack and stack[-1] != '(':

               output.append(stack.pop())

           stack.pop()  # Loại bỏ dấu '(' khỏi stack

   

    # Đưa các phần tử còn lại trong stack vào output

    while stack:

       output.append(stack.pop())

   

    return ' '.join(output)

 

# Chuỗi biểu thức trung tố cần chuyển sang hậu tố

bieu_thuc_trung_to = "2 * (4 + 3) - 5"

 

# Chuyển đổi thành biểu thức hậu tố

bieu_thuc_hau_to = trung_to_hau_to(bieu_thuc_trung_to)

 

print(f"Biểu thức trung tố: {bieu_thuc_trung_to}")

print(f"Biểu thức hậu tố: {bieu_thuc_hau_to}")

Kết quả khi chạy đoạn mã trên sẽ là:

Biểu thức trung tố: 2 * (4 + 3) - 5

Biểu thức hậu tố: 2 4 3 + * 5 -

Đoạn mã trên sử dụng ngăn xếp để chuyển đổi biểu thức từ dạng trung tố sang dạng hậu tố theo thuật toán Shunting Yard của Edsger Dijkstra. Quá trình này đảm bảo tính đúng đắn của biểu thức hậu tố và phù hợp với yêu cầu đề bài.


Bình luận

Giải bài tập những môn khác