/////// File CalcEng.C /////// #include // for pow #include "CalcEng.h" const char* CalcEng::keys = "+-*/=^NnAaCcQq"; CalcEng::CalcEng() { allclear(); } void CalcEng::allclear() { ans = arg = 0.0; argcnt = 1; err_flag = 0; op = '='; } void CalcEng::operate(char nc) { switch( nc ) { case 'A': // All Clear case 'a': allclear(); return; case 'N': // Sign change case 'n': if ( argcnt == 1 ) ans = -ans; else arg = -arg; return; case 'C': // Clear case 'c': if ( err_flag ) err_flag = 0; else { if ( argcnt == 1 ) ans = 0.0, op = '='; else { arg = 0.0; argcnt = 1;} } return; default: // +-*/= compute(); op = nc; // new opcode } } void CalcEng::operand(double in) { if ( op == '=' ) ans = in; else // if (argcnt == 1) not needed { arg = in; argcnt = 2; } } void CalcEng::compute() { if ( argcnt == 2 ) { switch( op ) { case '+': ans += arg; break; case '-': ans -= arg; break; case '*': ans *= arg; break; case '/': ans /= arg; break; case '^': ans = pow(ans, arg); break; } argcnt = 1; } }