Advertisement
Guest User

kill me

a guest
Oct 17th, 2019
101
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.52 KB | None | 0 0
  1. // SOURCE.CPP
  2. #include "Operand.h"
  3. #include <queue>
  4. #include <stack>
  5. #include <iostream>
  6.  
  7. double Calculate(std::queue<Operand*> opn)
  8. {
  9.   std::stack<double> values;
  10.   const long int INITIAL_SIZE = opn.size();
  11.   for (int i = 0; i < INITIAL_SIZE; i++)
  12.   {
  13.     auto n = dynamic_cast<Number*>(opn.front());
  14.     auto m = dynamic_cast<Operator*>(opn.front());
  15.     if (n)
  16.       values.push(n->number);
  17.     else if (m)
  18.     {
  19.       double temp1 = values.top();
  20.       values.pop();
  21.       double temp2 = values.top();
  22.       if (dynamic_cast<Add*>(opn.front()))
  23.       {
  24.         values.pop();
  25.         values.push(temp1 + temp2);
  26.       }
  27.       else if (dynamic_cast<Subtract*>(opn.front()))
  28.       {
  29.         values.pop();
  30.         values.push(temp2 - temp1);
  31.       }
  32.       else if (dynamic_cast<Multiply*>(opn.front()))
  33.       {
  34.         values.pop();
  35.         values.push(temp1 * temp2);
  36.       }
  37.       else if (dynamic_cast<Divide*>(opn.front()))
  38.       {
  39.         values.pop();
  40.         values.push(temp2 / temp1);
  41.       }
  42.       else if (dynamic_cast<Square*>(opn.front()))
  43.       {
  44.         values.pop();
  45.         values.push(pow(temp2, temp1));
  46.       }
  47.     }
  48.     opn.pop();
  49.   }
  50.  
  51.   return values.top();
  52. }
  53.  
  54.  
  55. int main()
  56. {
  57.   std::queue<Operand*> l;
  58.   l.push(new Number(6));
  59.   l.push(new Number(8));
  60.   l.push(new Add());
  61.   l.push(new Number(2));
  62.   l.push(new Square());
  63.   l.push(new Number(102));
  64.   l.push(new Number(53));
  65.   l.push(new Subtract());
  66.   l.push(new Divide());
  67.   l.push(new Number(428));
  68.   l.push(new Number(379));
  69.   l.push(new Subtract());
  70.   l.push(new Number(7));
  71.   l.push(new Divide());
  72.   l.push(new Add());
  73.  
  74.   std::cout << "The value of this expression is: " << Calculate(l) << "\n";
  75.  
  76.   system("PAUSE");
  77.   return 0;
  78. }
  79.  
  80.  
  81. // OPERAND.H
  82. #pragma once
  83.  
  84. class Operand
  85. {
  86. public:
  87.   virtual void yo() = 0;
  88.   virtual ~Operand();
  89. };
  90.  
  91. class Number : public Operand
  92. {
  93. public:
  94.   void yo()
  95.   {
  96.   }
  97.   Number() {}
  98.   Number(double num)
  99.   {
  100.     number = num;
  101.   }
  102.  
  103.   double number;
  104. };
  105.  
  106. class Operator : public Operand
  107. {
  108.   void yo()
  109.   {
  110.   }
  111.   virtual ~Operator();
  112. };
  113.  
  114. class Add : public Operator
  115. {
  116. public:
  117.   Add();
  118.   void yo()
  119.   {
  120.   }
  121. };
  122.  
  123. class Subtract : public Operator
  124. {
  125. public:
  126.   Subtract();
  127.   void yo()
  128.   {
  129.   }
  130. };
  131.  
  132. class Multiply : public Operator
  133. {
  134. public:
  135.   Multiply();
  136.   void yo()
  137.   {
  138.   }
  139. };
  140.  
  141. class Divide : public Operator
  142. {
  143. public:
  144.   Divide();
  145.   void yo()
  146.   {
  147.   }
  148. };
  149.  
  150. class Square : public Operator
  151. {
  152. public:
  153.   Square();
  154.   void yo()
  155.   {
  156.   }
  157. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement