Câu hỏi:
30/09/2024 194
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.
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.
Câu hỏi trong đề: Chuyên đề Tin 12 CTST Bài 1.4. Ứng dụng của ngăn xếp !!
Quảng cáo
Trả lời:
Sử dụng inFixtoPostfix() để chuyển biểu thức dạng trung tố sang dạng hậu tố.
Sử dụng hàm calPostfix() để tính giá trị biểu thức dạng hậu tố.
Hàm tính b op a, với a, b là toán hạng, op là toán tử:
def calculate(a, b, op): if op '+': return b+a
elif opa return b-a
elif op ==
return b*a
elif op '/':
return b/a
else:
return b**a
Hàm tính giá trị biểu thức dạng hậu tố:
def calPostfix(s): stack initStack() for op in s:
if not isoperator(op): push(stack, op)
else:
a = int(pop(stack)) b= int(pop(stack))
d = calculate(a, b, op) push(stack, d)
k = pop(stack)
return k
k = calPostfix ('245-+6*') print(k)
k = calPostfix ('243+*5-') print(k)
#Thêm tí
hạng vào stack
#Kiếm tr. nếu op là toán tử #Lấy toán hạng a ra khỏi stack
#Lấy toán hạng b ra khỏi stack
#Gọi calculate để thực hiện phép tính b op a #Thêm d vào stack
#Lấy phần tử còn lại trong stack
#Trả về kết quả
Hot: 500+ Đề thi thử tốt nghiệp THPT các môn, ĐGNL các trường ĐH... file word có đáp án (2025). Tải ngay
CÂU HỎI HOT CÙNG CHỦ ĐỀ
Lời giả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)
Lời giải
1. Sử dụng lệnh inFix = inFix[:-1] để đảo ngược chuỗi biểu thức trung tố. Ví dụ, *(2 – 7/3) * (2/8 – 4)" được chuyển thành ")4–8/2(*)3/7–2(".
2. Thay thế các dấu đóng ngoặc thành dấu mở ngoặc và dấu mở ngoặc thành dấu đóng ngoặc trong chuỗi biểu thức đã đảo ngược trong bước 1.
Ví dụ, chuỗi ")4–8/2(*)3/7−2(" được chuyển thành "(4 – 8/2) * (3/7 – 2)".
3. Gọi hàm inFixtoPostfix() chuyển từ biểu thức dạng trung tố sang dạng hậu tố. 4. Đảo ngược chuỗi biểu thức kết quả của 3.
5. Kết thúc.
Lời giải
Bạn cần đăng ký gói VIP ( giá chỉ từ 199K ) để làm bài, xem đáp án và lời giải chi tiết không giới hạn.
Lời giải
Bạn cần đăng ký gói VIP ( giá chỉ từ 199K ) để làm bài, xem đáp án và lời giải chi tiết không giới hạn.
Lời giải
Bạn cần đăng ký gói VIP ( giá chỉ từ 199K ) để làm bài, xem đáp án và lời giải chi tiết không giới hạn.