Kí pháp nghịch đảo Ba Lan và phương pháp tính giá trị của biểu thức toán học

Giải Chuyên đề Tin 12 Bài 4: Dự án học tập: Xây dựng chương trình sử dụng kiểu dữ liệu hàng đợi và ngăn xếp - Cánh diều

Dự án 2 trang 26 Chuyên đề Tin học 12: Kí pháp nghịch đảo Ba Lan và phương pháp tính giá trị của biểu thức toán học

Hãy viết chương trình yêu cầu nhập vào một kí pháp nghịch đảo Ba Lan dưới dạng một xâu kí tự chỉ bao gồm: năm toán tử cộng, trừ, nhân, chia, luỹ thừa (+, -,*, /, "), các toán hạng đều chỉ là các số nguyên có một chữ số từ 0 đến 9. Sau đó, tính giá trị của kí pháp này và in kết quả ra màn hình.

Quảng cáo

Lời giải:

Chương trình yêu cầu nhập vào một kí pháp nghịch đảo Ba Lan (Reverse Polish Notation - RPN) chỉ bao gồm các toán tử cộng, trừ, nhân, chia, lũy thừa (+, -, *, /, ^) và các toán hạng là các số nguyên có một chữ số từ 0 đến 9. Chương trình sẽ tính giá trị của biểu thức đó và in kết quả ra màn hình:

Chương trình như sau:

def evaluate_rpn(expression):

    stack = []

    # Define operations

    operators = {

        '+': lambda b, a: a + b,

        '-': lambda b, a: a - b,

        '*': lambda b, a: a * b,

        '/': lambda b, a: a // b if b != 0 else float('inf'),  # Using integer division for single-digit integers

        '^': lambda b, a: a ** b

    }

    # Process each character in the expression

    for char in expression:

        if char.isdigit():

           stack.append(int(char))

        elif char in operators:

            b = stack.pop()

            a = stack.pop()

            result = operators[char](b, a)

           stack.append(result)

        else:

            raise ValueError(f"Invalid character in expression: {char}")

    # The final result should be the only element left in the stack

    if len(stack) != 1:

        raise ValueError("The input RPN expression is invalid.")

    return stack[0]

# Input the RPN expression

expression = input("Nhập biểu thức ký pháp nghịch đảo Ba Lan: ")

# Evaluate the expression

try:

    result = evaluate_rpn(expression)

    print(f"Kết quả: {result}")

except Exception as e:

    print(f"Lỗi: {e}")

Quảng cáo

Lời giải bài tập Chuyên đề Tin 12 Bài 4: Dự án học tập: Xây dựng chương trình sử dụng kiểu dữ liệu hàng đợi và ngăn xếp hay, chi tiết khác:

Quảng cáo

Xem thêm lời giải bài tập Chuyên đề học tập Tin học 12 Cánh diều hay, chi tiết khác:

Xem thêm các tài liệu học tốt lớp 12 hay khác:

Đã có app VietJack trên điện thoại, giải bài tập SGK, SBT Soạn văn, Văn mẫu, Thi online, Bài giảng....miễn phí. Tải ngay ứng dụng trên Android và iOS.

Theo dõi chúng tôi miễn phí trên mạng xã hội facebook và youtube:

Nếu thấy hay, hãy động viên và chia sẻ nhé! Các bình luận không phù hợp với nội quy bình luận trang web sẽ bị cấm bình luận vĩnh viễn.


Giải bài tập lớp 12 sách mới các môn học