Postfix式を評価する
数式を解くには、接頭辞または接尾辞の形式が必要です。中置を後置に変換した後、正しい答えを見つけるために後置評価アルゴリズムが必要です。
ここでも、スタックデータ構造を使用して接尾辞式を解決する必要があります。
後置式から、いくつかのオペランドが見つかった場合、それらをスタックにプッシュします。演算子が見つかると、スタックから2つのアイテムがポップされ、操作は正しい順序で実行されます。その後、結果は将来の使用のためにスタックにもプッシュされます。式全体が完成すると、最終結果もスタックトップに保存されます。
入力と出力
Input: Postfix expression: 53+62/*35*+ Output: The result is: 39
アルゴリズム
postfixEvaluation(postfix)
入力: 評価する接尾辞式。
出力: 接尾辞フォームを評価した後に回答してください。
Begin for each character ch in the postfix expression, do if ch is an operator ⨀ , then a := pop first element from stack b := pop second element from the stack res := b ⨀ a push res into the stack else if ch is an operand, then add ch into the stack done return element of stack top End
例
#include<iostream>
#include<cmath>
#include<stack>
using namespace std;
float scanNum(char ch) {
int value;
value = ch;
return float(value-'0'); //return float from character
}
int isOperator(char ch) {
if(ch == '+'|| ch == '-'|| ch == '*'|| ch == '/' || ch == '^')
return 1; //character is an operator
return -1; //not an operator
}
int isOperand(char ch) {
if(ch >= '0' && ch <= '9')
return 1; //character is an operand
return -1; //not an operand
}
float operation(int a, int b, char op) {
//Perform operation
if(op == '+')
return b+a;
else if(op == '-')
return b-a;
else if(op == '*')
return b*a;
else if(op == '/')
return b/a;
else if(op == '^')
return pow(b,a); //find b^a
else
return INT_MIN; //return negative infinity
}
float postfixEval(string postfix) {
int a, b;
stack<float> stk;
string::iterator it;
for(it=postfix.begin(); it!=postfix.end(); it++) {
//read elements and perform postfix evaluation
if(isOperator(*it) != -1) {
a = stk.top();
stk.pop();
b = stk.top();
stk.pop();
stk.push(operation(a, b, *it));
}else if(isOperand(*it) > 0) {
stk.push(scanNum(*it));
}
}
return stk.top();
}
main() {
string post = "53+62/*35*+";
cout << "The result is: "<<postfixEval(post);
} 出力
The result is: 39
-
Pythonを使用して式ツリーを構築および評価するプログラム
式ツリーのポストオーダートラバーサルが与えられたとします。与えられたポストオーダートラバーサルから式ツリーを構築してから、式を評価する必要があります。式ツリーのルートとツリーの評価値を返します。 したがって、入力が次のような場合 その場合、出力は-7になります。 ツリーの入力として指定された接尾辞の順序は、[1、 2、+、 3、 4、+、*]です。評価すると、式は(1 – 2)*(3 + 4);になります。これは-7に相当します。 これを解決するには、次の手順に従います- 左=0右=1 関数evaluate()を定義します。これが定着します ルートの値が数値の場
-
Pythonで文字列を評価し、オブジェクトを返すにはどうすればよいですか?
組み込みのeval()関数には文字列引数が必要です。ただし、Pythonインタープリターは、文字列をPython式として扱い、それが有効かどうかを評価してから、式の結果である型オブジェクトを返します。 算術式を含む文字列 >>> x=eval('2+2') >>> type(x) <class 'int'> >>> x 4 リスト/タプルに評価する文字列 >>> x=eval('tuple([1,2,3])') >>> x (1, 2, 3)