2013-03-09 3 views
0

식을 역 폴란드 표기법으로 변환하고 계산을 수행 한 후 대답을 표시해야하는 프로그램이 있습니다. 지금은 계산을 올바르게 수행하지 못합니다. 예를 들어 5 + 2 + 5를 입력하면 어떤 이유로 5 + 2 만 등록합니다. 아무도 내가 잘못한 것을 말해 줄 수 있습니까?RPN 계산기가 올바르게 계산을 수행하지 않습니다.

#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; 

} 
} 
+1

프로그램에서 아무 것도 변환하지 않습니다. 그것은 입력이 RPN이 될 것으로 기대합니다. – us2012

+1

접미사가 필요할 때 중위 표현식을 입력했기 때문에? –

답변

2

프로그램에서 아무 것도 변환하지 않습니다. 이것은 두 개의 피연산자와 이진 연산으로 구성된 단일 항을 사용하고 결과를 계산하는 매우 간단한 RPN 계산기입니다.

보다 복잡한 RPN 입력이 필요한 경우 입력 및 계산 논리를 다시 설계해야합니다.

5+4과 같은 중위 표현을 입력하고 내부 표현을 RPN 스택으로 유지하려면 해당 구문 분석기를 작성해야합니다.

+0

머리를 주셔서 감사합니다. 나는 튜터에게이 글을 쓰도록 도와 주었다. 나는 그가 내가 필요로하는 것을 오해 한 것 같다. 아마 나를 위해 작동하도록 수정할 수 있지만 이것을 알고. – Dorden

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 

스택 깊이 검사 더미가 생략되었습니다.

관련 문제