Câu hỏi:
30/09/2024 345Chuyể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ố.
Sách mới 2k7: Tổng ôn Toán, Lí, Hóa, Văn, Sử, Địa…. kỳ thi tốt nghiệp THPT Quốc gia 2025, đánh giá năng lực (chỉ từ 110k).
Quảng cáo
Trả lời:
Sử dụng hàm isOperator() để kiểm tra kí tự là toán tử, hàm getPriority() để xác định độ ưu tiên của toán tử, hàm inFixtoPostfix() để chuyển biểu thức dạng trung tố sang dạng hậu tố
Hàm kiểm tra kí tự có phải là toán tử hay không:
def isoperator (c):
return c in '+-*/^'
Hàm kiểm tra độ ưu tiên của toán tử:
def getPriority (op):
if op '+' or op ==
return 1
elif op ==
return 2
elif op:
else:
return 3
return 0
or op '/':
chuyển biểu thức dạng trung tổ sang dạng hậu tố:
#Hàm chuyển biểu thức trung tổ sang hậu tổ
def inFixtoPostfix(infix):
infix infix.replace('[', '(').replace('1', ')').replace('(', '(').
Replace (‘}’, ‘)’)
Lace('}', ')')
stack initStack()
postfix = ""
for c in infix:
if c =='':
continue
#Bỏ qua khoảng trắng
#Nếu kí tự là toán hạng, thêm vào chuỗi hậu tố
if c.isalpha() or c.isdigit():
postfix += c
#Nếu kí tự là '(', thêm vào stack
elif (':
push(stack, c)
#Nếu kí tự là ')'
elif c == ')': #Lấy ra khỏi stack và thêm vào postfix cho đến khi gặp ( while not isEmptyStack(stack) and top (stack) != '(':
postfix += pop(stack)
pop(stack)
elif isOperator (c): #Toán tử
if c != '^':
while not isEmptyStack(stack) and getPriority(c) <= getPriority(top(stack)): postfix + pop (stack)
postfix + pop(stack)
push(stack, c)
stack): áng tạo
while not isEmptyStack (stack):
postfix += pop(stack)
return postfix
infix = '2* (4 + 3) - 5'
postfix = inFixtoPostfix (infix)
print("Biểu thức hậu tố: " postfix)
infix = '2^2^3'
postfix = inFixtoPostfix(infix)
print("Biểu thức hậu tố: ", postfix)
CÂU HỎI HOT CÙNG CHỦ ĐỀ
Câu 1:
Em hãy minh hoạ:
a) Kiểm tra tính hợp lệ của dấu ngoặc trong chuỗi [2 * (4 + 3) - 5] bằng cách sử dụng ngăn xếp.
b) Chuyển biểu thức (1 - 4) * 2 + 7 sang dạng hậu tố bằng cách sử dụng ngăn xếp.
Câu 2:
Viết chương trình kiểm tra tính hợp lệ của dấu ngoặc trong chuỗi biểu thức số học. Dữ liệu vào: chuỗi biểu thức số học.
Dữ liệu ra: nếu các dấu ngoặc cân bằng thì thông báo lên màn hình "Chuỗi có dấu ngoặc hợp lệ", ngược lại thông báo "Chuỗi có dấu ngoặc không hợp lệ".
Câu 3:
Nhiệm vụ. Chuyển biểu thức dạng trung tố sang tiền tố.
Yêu cầu: Viết chương trình chuyển một biểu thức dạng trung tố inFix sang dạng tiền tố preFix.
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 tiền tố.
Câu 4:
Cho biết cách trình bày cách để kiểm tra số dấu mở ngoặc và số dấu đóng ngoặc tương ứng trong chuỗi "(((){[]}))" có bằng nhau hay không.
Câu 5:
Nhiệm vụ: Viết chương trình tính giá trị của biểu thức số học với biểu thức đầu vào là biểu thức hậu tố.
Yêu cầu: Viết chương trình tính giá trị biểu thức số học dùng hàm chuyển biểu thức inFixtoPostfix(). Chạy chương trình trên.
về câu hỏi!