Advertisement
Guest User

Untitled

a guest
Apr 28th, 2017
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.41 KB | None | 0 0
  1.  
  2. #include <iostream>
  3. #include <vector>
  4. using namespace std;
  5. class Node{
  6. public:
  7. Node* left;
  8. Node* right;
  9. virtual void PrintInOrder(){}
  10. void getInfo();
  11. virtual double evaluate(){return 0;}
  12. };
  13. class operation : public Node{
  14. public:
  15. char info;
  16. void PrintInOrder(){
  17. if(!this)return;
  18. if(left)left->PrintInOrder();
  19. cout<<info;
  20. if(right)right->PrintInOrder();
  21.  
  22. }
  23. double evaluate(){
  24. if(info=='+'){
  25. return left->evaluate()+right->evaluate();
  26. }
  27.  
  28. if(info=='*'){
  29. return left->evaluate()*right->evaluate();
  30. }
  31.  
  32. if(info=='/'){
  33. return left->evaluate()/right->evaluate();
  34. }
  35.  
  36. if(info=='-'){
  37. return left->evaluate()-right->evaluate();
  38. }
  39.  
  40. }
  41.  
  42. // void getInfo(){return info;}
  43. };
  44.  
  45. class number : public Node{
  46. public:
  47.  
  48.  
  49. double info;
  50.  
  51. void PrintInOrder(){
  52. if(!this)return;
  53. if(left)left->PrintInOrder();
  54. cout<<info;
  55. if(right)right->PrintInOrder();
  56. }
  57. double evaluate(){
  58. return info;
  59. }
  60. //
  61. // void getInfo(){return info;}
  62. };
  63. void seekCertainOperator(char Op,vector<Node*>&Input){
  64.  
  65.  
  66. for(int i=0;i<Input.size();i++){
  67. if(((operation*)Input[i])->info==Op){
  68. Input[i]->left=Input[i-1];
  69. Input[i]->right=Input[i+1];
  70. Input.erase(Input.begin()+i-1);
  71. Input.erase(Input.begin()+i);
  72. }
  73. }
  74. }
  75. void allOperator(vector<Node*>&Input){
  76. seekCertainOperator('*',Input);
  77. seekCertainOperator('/',Input);
  78. seekCertainOperator('+',Input);
  79. seekCertainOperator('-',Input);
  80. }
  81. vector<Node*> Transform(string In){
  82. vector <Node*> Temp;
  83. for(int i=0;i<In.size();i++){
  84. if(In[i]>='0'&&In[i]<='9'){
  85. Node *Temp1= new number();
  86. ((number*)Temp1)->info=In[i]-'0';
  87. Temp1->left=NULL;
  88. Temp1->right=NULL;
  89. Temp.push_back(Temp1);
  90. }else{
  91. Node*Temp1=new operation;
  92. ((operation*)Temp1)->info=In[i];
  93. Temp1->left=NULL;
  94. Temp1->right=NULL;
  95. Temp.push_back(Temp1);
  96. }
  97.  
  98. }
  99. return Temp;
  100. }
  101. int main()
  102. {
  103. vector<Node*> Equation;
  104. string Input="6+5*9/8-6/4*7+2";
  105. Equation=Transform(Input);
  106. allOperator(Equation);
  107. Equation[0]->PrintInOrder();
  108. cout<<" = "<<Equation[0]->evaluate();
  109. return 0;
  110. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement