Câu hỏi:
30/09/2024 442Nhiệ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 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:
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.
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
#Mã giả kiểm tra dấu ngoặc hợp lệ trong chuỗi biểu thức
checkParentheses (s)
openParentheses = ["[","{","("] closeParentheses = ["]","}",")"] khởi tạo ngăn xếp stack rỗng for c in s:
if c là là dấu mở ngoặc:
Thêm c vào stack
elif c là dấu đóng ngoặc:
if stack rỗng:
return False
#Danh sách các ngoặc mở
#Danh sách các ngoặc đóng
else:
pos = vị trí của c trong closeParentheses
c1 là dấu mở ngoặc ở vị trí pos (tương ứng với c) c2 là dấu mở ngoặc lấy ra từ stack
if c1 khác c2:
return False
if stack rỗng:
return True
else:
return False
* Hàm kiểm tra dấu ngoặc hợp lệ trong chuỗi:
#Hàm kiểm tra dấu ngoặc hợp lệ trong chuỗi biểu thức
def checkParentheses(s):
openParentheses = ["[","",""] closeParentheses = ["]","}",")"] stack initStack() for c in s:
if c in openParentheses: push(stack, c)
elif c in closeParentheses:
if isEmptyStack(stack):
return False
else:
#Danh sách các kí tự ngoặc mở #Danh sách các kí tự ngoặc đồng #Khởi tạo ngăn xếp rỗng #Duyệt mọi kí tự trong s
#Kiểm tra nếu c là dấu mở ngoặc
#Thêm c vào stack
#Ngược lại, nếu c là dấu đóng ngoặc
pos = closeParentheses.index(c) #Lấy vị trí của kí tự ngoặc đóng
c1 = openParentheses[pos]
c2 = pop(stack)
if c1 = c2:
return False
if isEmptyStack(stack):
return True
else:
return False
#Nếu stack rỗng, dấu ngoặc hợp lệ
#Ngược lại, chuỗi có dấu ngoặc không hợp lệ
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.
15 câu Trắc nghiệm Tin học 12 Cánh diều Mô hình và các giao thức mạng có đáp án
Bộ 3 đề thi cuối kì 2 Tin 12 Kết nối tri thức có đáp án - Đề 1
15 câu Trắc nghiệm Tin học 12 Kết nối tri thức Bài 19 có đáp án
15 câu Trắc nghiệm Tin học 12 Kết nối tri thức Bài 23 có đáp án
15 câu Trắc nghiệm Tin học 12 Kết nối tri thức Bài 25 có đáp án
Bộ 3 đề thi cuối kì 2 Tin 12 Chân trời sáng tạo có đáp án - Đề 1
15 câu Trắc nghiệm Tin học 12 Kết nối tri thức Bài 24 có đáp án
15 câu Trắc nghiệm Tin học 12 Cánh diều Giới thiệu trí tuệ nhân tạo có đáp án
Hãy Đăng nhập hoặc Tạo tài khoản để gửi bình luận