#include #include #include #include const int MAX_LENGTH = 35; typedef char string[MAX_LENGTH]; string stack; string postfix; string input; int index = 0; int top = -1; void push(char c) { if ( top < 35 ) stack[++top] = c; } char pop() { if ( top > -1 ) return stack[top--]; return '~'; } char peek() { if ( top > -1 ) return stack[top]; return '~'; } void gotOperand(char ch, int prec1) { while ( top > -1 ) { char opTop = pop(); if ( opTop == '(' ) { push(opTop); break; } else { int prec2; if ( opTop=='+' || opTop=='-' ) prec2 = 1; else prec2 = 2; if ( prec2 < prec1) { push(opTop); break; } else postfix[index++] = opTop; } } push(ch); } void gotParen(char ch) { while ( top > -1 ) { char chx = pop(); if ( chx == '(' ) break; else postfix[index++] = chx; } } double evaluate() { int intRetVal[MAX_LENGTH]; int dIndex = -1; for ( int i=0; i<=index; i++ ) { if ( postfix[i] >= '0' && postfix[i] <= '9' ) { intRetVal[++dIndex] = postfix[i] - 48; } else { int dTwo = intRetVal[dIndex--]; int dOne = intRetVal[dIndex--]; switch (postfix[i]) { case '+': intRetVal[++dIndex] = dOne + dTwo; break; case '-': intRetVal[++dIndex] = dOne - dTwo; break; case '*': intRetVal[++dIndex] = dOne * dTwo; break; case '/': intRetVal[++dIndex] = dOne / dTwo; break; default: intRetVal[++dIndex] = 0; } } } return intRetVal[0]; } void main() { double dOutput = 0; ifstream InFile("algebra.txt"); ofstream OutFile("postfix.txt"); while ( InFile.peek() != EOF ) { InFile.getline(input, MAX_LENGTH); int l = strlen(input); for (int i=0; i -1 ) { postfix[index++] = pop(); } dOutput = evaluate(); OutFile << postfix << " = " << dOutput << "\n"; index = 0; } InFile.close(); }