Advertisement
GeeckoDev

expression.cpp +numbers

Dec 14th, 2011
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <iostream>
  2. #include <cmath>
  3.  
  4. #include "expression.h"
  5.  
  6. Expression::Expression()
  7. {
  8.     saPile = new std::stack<int>();
  9. }
  10.  
  11.  
  12. Expression::~Expression()
  13. {
  14.     delete saPile;
  15. }
  16.  
  17.  
  18. int Expression::chiffresEnNombre(std::vector<int>* unTab)
  19. {
  20.     int i=0, n=0;
  21.    
  22.     for (std::vector<int>::iterator it = unTab->begin(); it != unTab->end(); it++, i++)
  23.     {
  24.         n += (*it) * pow(10, unTab->size() - i - 1);
  25.     }
  26.    
  27.     return n;
  28. }
  29.  
  30.  
  31. int Expression::evaluer(std::vector<char>* unTab)
  32. {
  33.     while (!saPile->empty())
  34.     {
  35.         saPile->pop();
  36.     }
  37.  
  38.     std::vector<int>* leTabChiffres = new std::vector<int>();
  39.  
  40.     for (std::vector<char>::iterator it = unTab->begin(); it != unTab->end(); it++)
  41.     {
  42.         if ((*it) >= '0' && (*it) <= '9')
  43.         {
  44.             leTabChiffres->push_back(conversionCharEnInt(*it));
  45.         }
  46.         else
  47.         {
  48.             if (!leTabChiffres->empty())
  49.             {
  50.                 saPile->push(chiffresEnNombre(leTabChiffres));
  51.                 //std::cout << "Empile: " << saPile->top() << std::endl;
  52.                 leTabChiffres->resize(0);
  53.             }
  54.          
  55.             if ((*it) == ' ')
  56.             {
  57.                 continue;
  58.             }
  59.             else
  60.             {
  61.                 saPile->push(traiterOperation(*it));
  62.                 //std::cout << "Empile: " << saPile->top() << std::endl;
  63.             }
  64.         }
  65.     }
  66.  
  67.     if (!leTabChiffres->empty())
  68.     {
  69.         saPile->push(chiffresEnNombre(leTabChiffres));
  70.     }
  71.     delete leTabChiffres;
  72.    
  73.     if (saPile->size() != 1) throw 3;
  74.     return saPile->top();
  75. }
  76.  
  77.  
  78. int Expression::conversionCharEnInt(char unChar)
  79. {
  80.     return unChar - '0';
  81. }
  82.  
  83.  
  84. int Expression::traiterOperation(char uneOp)
  85. {
  86.     int a, b;
  87.  
  88.     if (saPile->empty()) throw(2);
  89.     b = saPile->top();
  90.     saPile->pop();
  91.     //std::cout << "Dépile: " << b << std::endl;
  92.  
  93.     if (saPile->empty()) throw(2);
  94.     a = saPile->top();
  95.     saPile->pop();
  96.     //std::cout << "Dépile: " << a << std::endl;
  97.  
  98.     switch (uneOp)
  99.     {
  100.     case '+':
  101.         return a+b;
  102.         break;
  103.     case '-':
  104.         return a-b;
  105.         break;
  106.     case '*':
  107.         return a*b;
  108.         break;
  109.     case '/':
  110.         if (b == 0) throw 0;
  111.         return a/b;
  112.         break;
  113.     case '%':
  114.         if (b == 0) throw 0;
  115.         return a%b;
  116.         break;
  117.     case '<':
  118.         return a<b;
  119.         break;
  120.     case '>':
  121.         return a>b;
  122.         break;
  123.     case '=':
  124.         return a==b;
  125.         break;
  126.     case '!':
  127.         return a!=b;
  128.         break;
  129.     case '&':
  130.         return a&&b;
  131.         break;
  132.     case '|':
  133.         return a||b;
  134.         break;
  135.     }
  136.  
  137.     throw 1;
  138.     return 0;
  139. }
  140.  
  141. // EOF
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement