0

式を逆ポーランド記法に変換し、計算を実行した後に答えを表示するプログラムがあります。現在、正しく計算を実行していません。たとえば、5+2+5 と入力すると、何らかの理由で 5+2 しか登録されません。誰が私が間違ったことを教えてもらえますか?

#include <iostream>
#include <stack>


void calculation(int, int, char);
using namespace std;
stack<int> a;

void main(void)
{

bool expression = false;
char ch;
char done;

int op1, op2;

cout << "Reverse Polish Notation : " << endl;
cout << "Enter expression: " << endl;
while (!expression)
{
    cin >> op1;
    cin >> op2;
    cin >> ch;

    calculation(op1, op2, ch);
    if (!cin)
        expression = false;
    else
    {
        expression = true;
        calculation(op1, op2, ch);
    }
}
cout << "Your expression is " <<  a.top() << endl;

}

void calculation(int oper1, int oper2, char chr)
{
switch (chr)
{
    case '+':
        a.push(oper1 + oper2);
        break;
    case '-':
        a.push(oper1 - oper2);
        break;
    case '*':
        a.push(oper1 * oper2);
        break;
    case '/':
        a.push(oper1 / oper2);
        break;

}
}
4

2 に答える 2

2

プログラムは何も変換しません。これは、 2つのオペランドと2項演算で構成される単一の項を取り、結果を計算する非常に単純なRPN計算機です。

より複雑なRPN入力を取得する必要がある場合は、入力および計算ロジックを再設計する必要があります。

のような中置式を入力したい5+4が、内部表現をRPNスタックとして保持したい場合は、それを行うパーサーも作成する必要があります。

于 2013-03-09T22:53:06.890 に答える
2

すべての操作は、スタックとの間で行う必要があります。あなたのメインループはもっと似ているはずです

while not eol
   if reading an operator
       push result of applying operator to top two stack elements
   else if reading an integer
       read it and push it on to the stack
   else 
       print an error message

print value at top of stack

スタック深度チェックの山を省略しました。

于 2013-03-09T22:57:28.063 に答える