/////// File CalcEng.C /////// #include // for pow #include "CalcEng.h" CalcEng::CalcEng() { allclear(); } void CalcEng::allclear() { ans = arg = 0.0; argcnt = 1; 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 ( 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 { 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; } argcnt = 1; } }