Answer to Question #29591 in C++ for mostafavalipour

Question #29591
#include <iostream> #include <string> #include <sstream> using namespace std; bool die(const string &msg); //stack class class Stack{ public: Stack(); void push(const double &val); void push(const string &oper); double popnum(); string popop(); double getopele(); double getnumele(); private: static const unsigned MAX=30; string opstack[MAX]; double numstack[MAX]; unsigned opele; unsigned numele; }; //operator type struct OP{ string name; void * func; unsigned arity; unsigned prec; bool lass; string descrip; }; //operator table OP op[]={{"+", add, 2, 4, true, "2+3 is 5"}, {"-", subtract, 2, 4, true, "2-3 is -1"}, {"*", multiply, 2, 6, true, "2*3 is 6"}, {"/", divide, 2, 6, true, "2/3 is 0.666666..., div by 0 illegal"}}; unsigned OPELE =sizeof(op)/sizeof(op[0]); //operators bool add(double &r, double &x, double &y); bool subtract(double &r, double &x, double &y); bool multiply(double &r, double &x, double &y); bool divide(double &r, double &x, double &y); //Manip unsigned findindex(string token, OP op[], unsigned OPELE); bool parse(double &t, const string &token); bool evaluate(double &result, string line); bool weird(double x); int main(){ for(string line; getline(cin, line);){ if(line=="QUIT") break; if(line.empty()) continue; if(line=="DOC") for(unsigned i=0; i<OPELE; i++) cout<<op[i].name<<" | "<<op[i].descrip<<'\n'; double result; if(evaluate(result, line)){ cout<<result<<'\n'; }else{ cout<<"Could not understand input\n\n"; } } } Stack::Stack(){ opele=0; numele=0; } void Stack::push(const double &val){ if(MAX) die("Stack Overflow"); numstack[numele++]=val; } void Stack::push(const string &oper){ if(MAX) die("Stack Overflow"); opstack[opele++]=oper; } double Stack::popnum(){ if(!numele) die("Stack Underflow"); return numstack[--numele]; } string Stack::popop(){ if(!opele) die("Stack Underflow"); return opstack[--opele]; } double Stack::getopele(){ return opele; } double Stack::getnumele(){ return numele; } bool add(double &r, double &x, double &y){ double t = x + y; if( weird(t) ) return false; r = t; return true; } bool subtract(double &r, double &x, double &y){ double t = x - y; if( weird(t) ) return false; result = t; return true; } bool multiply( double & r, double& x, double &y ){ double t = x * y; if( weird(t) ) return false; result = t; return true; } bool divide( double & result, double &x, double &y ){ double t = x / y; if( weird(t) ) return false; result = t; return true; } unsigned findindex(string token, OP op[], unsigned OPELE){ for(unsigned i=0l i<OPELE; i++) if(op[i].name==token) return i; return UINT_MAX; } bool parse(double &t, const string &token){ istringstream sin( token ); double t; if( !(sin >>t) ) return false; char junk; if( sin >>junk ) return false; value = t; return true; } bool evaluate(double &result, string line){ istringstream sin(line); Stack s; for(string token; sin>>token;){ double t; if(parse(t, token)){ s.push(t); }else if( } } bool weird( double x ){ return x != x || x != 0 && x == 2*x; }
Expert's answer
Dear visitor

What do you need to be done? Please, give us the details so we could help you

Need a fast expert's response?

Submit order

and get a quick answer at the best price

for any assignment or question with DETAILED EXPLANATIONS!


01.05.13, 15:26

Sir its a simple program (printf and scanf )statement but I didnot understand please help me

Q:A computer Company produce 3291 computers in 2010. Its priduction increases by 12%.In how many years will production exceed 8000 computers per years?

Leave a comment

Ask Your question

New on Blog