[Thuật toán – Java] Tính giá trị của biểu thức hậu tố – Calculate value of the postfix Equation
Việc tính giá trị của một biểu thức toán học ở dạng trung tố trong máy tính thông thường sẽ được chuyển sang dạng ký pháp nghịch đảo Ba Lan (hậu tố) để việc tính toán được dễ dàng. Bạn có thể xem lại thuật toán chuyển đổi từ trung tố sang hậu tố trong bài viết của tôi. Trong bài viết này, tôi sẽ trình bày phương pháp tính giá trị của một biểu thức tiền tố và hậu tố bằng Stack.
Lặp qua các token của của biểu thức postfix từ trái qua phải:
– Nếu là toán hạng: push vào stack
– Nếu là toán tử: pop hai toán hạng trong stack ra và tính giá trị của chúng dựa vào toán tử này. Push kết quả đó lại vào stack.
Phần tử còn sót lại trong stack sau vòng lặp chính là kết quả của biểu thức.
Với elementMath là mảng các phần tử của biểu thức hậu tố.
public String valueMath(String[] elementMath){ Stack <String> S = new Stack<String>(); InfixToPostfix IFP = new InfixToPostfix(); for (int i=0; i<elementMath.length; i++){ char c = elementMath[i].charAt(0); if (!IFP.isOperator(c)) S.push(elementMath[i]); else{ double num = 0f; double num1 = Float.parseFloat(S.pop()); double num2 = Float.parseFloat(S.pop()); switch (c) { case '+' : num = num2 + num1; break; case '-' : num = num2 - num1; break; case '*' : num = num2 * num1; break; case '/' : num = num2 / num1; break; default: break; } S.push(Double.toString(num)); } } return S.pop(); }
Hình như bạn còn chưa xem xét đến trường hợp có dấu mở, đóng ngoặc.
Khi đó, thứ tự thực hiện phép tính sẽ khác.
Khi biểu thức hậu tố đã đk xác định thì ko còn mấy cái đó nữa bạn.
Hàm main viết sao vay76
Hàm main viết sao vậy bạn.
🙂 chuyển từ Infix sang PostFix được nhưng chạy cái tính ra kết quả bị lỗi anh ơi, để ValueMatch dưới cùng trong main sau khi đã chuyển ra được Postfix nhưng vẫn bị lỗi. ANh có thể check code lại giúp không anh
chắc cú pháp biểu thức của bạn sai. mình test chạy đúng mà.
Trong hàm valueMath bạn chạy i từ 1 là ra đúng nhá, mình cũng bị chỗ ni, không rõ sao elementMath phần tử đầu là rỗng nên sẽ sai.??? Fix chạy đúng nhưng chưa hiểu lý do, đang tìm lý do đây bạn.
cho mình xem hàm main với b