Guest User

Untitled

a guest
Apr 25th, 2013
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.51 KB | None | 0 0
  1. #include <iostream>
  2. #include <stack>
  3. #include <sstream>
  4. #include <algorithm>
  5. #include <cstdlib>
  6. #include <cstring>
  7.  
  8. using namespace std;
  9.  
  10. stack<char>digit_stack;
  11. stack<char>operator_stack;
  12. stack<int>addition_stack;
  13.  
  14. int bitnost(char a)
  15. {
  16.     int temp;
  17.     if (a == '*' || a == '/')
  18.         temp = 2;
  19.     else  if (a == '+' || a == '-')
  20.         temp = 3;
  21.     return temp;
  22. }
  23.  
  24. int konvertaj_u_int(string broj)
  25. {
  26.     int niz[10000];
  27.  
  28.     for(long long int i=0; i<broj.length(); i++)
  29.         niz[i]=broj[i]-'0';
  30.  
  31.     int jedinice=0, desetice=0, stotice=0, hiljadice=0, desethiljadice=0, stohiljadice=0;
  32.     int rezultat=0;
  33.  
  34.     if(broj.length()==1)
  35.         jedinice=niz[0];
  36.     if(broj.length()==2)
  37.     {
  38.         desetice=niz[0];
  39.         jedinice=niz[1];
  40.     }
  41.  
  42.     if(broj.length()==3)
  43.     {
  44.         stotice=niz[0];
  45.         desetice=niz[1];
  46.         jedinice=niz[2];
  47.     }
  48.  
  49.     if(broj.length()==4)
  50.     {
  51.         hiljadice=niz[0];
  52.         stotice=niz[1];
  53.         desetice=niz[2];
  54.         jedinice=niz[3];
  55.     }
  56.  
  57.     if(broj.length()==5)
  58.     {
  59.         desethiljadice=niz[0];
  60.         hiljadice=niz[1];
  61.         stotice=niz[2];
  62.         desetice=niz[3];
  63.         jedinice=niz[4];
  64.     }
  65.  
  66.     if(broj.length()==6)
  67.     {
  68.         stohiljadice=niz[0];
  69.         desethiljadice=niz[1];
  70.         hiljadice=niz[2];
  71.         stotice=niz[3];
  72.         desetice=niz[4];
  73.         jedinice=niz[5];
  74.     }
  75.  
  76.     jedinice*=1;
  77.     desetice*=10;
  78.     stotice*=100;
  79.     hiljadice*=1000;
  80.     desethiljadice*=10000;
  81.     stohiljadice*=100000;
  82.  
  83.     rezultat=jedinice+desetice+stotice+hiljadice+desethiljadice+stohiljadice;
  84.     return rezultat;
  85. }
  86.  
  87. int izracunaj(const char *izraz)
  88. {
  89.     string mandza;
  90.     string infix_string;
  91.     string postfix_string;
  92.  
  93.     for(long long int i=0; i<strlen(izraz); i++)
  94.         infix_string+=izraz[i];
  95.  
  96.     for(long long int i=0; i<infix_string.length(); i++)
  97.     {
  98.         if(infix_string[i]=='+' || infix_string[i]=='-' || infix_string[i]=='*' || infix_string[i]=='/')
  99.         {
  100.             postfix_string+="|";
  101.             while(!operator_stack.empty() && bitnost(operator_stack.top())<=bitnost(infix_string[i]))
  102.             {
  103.                 postfix_string+=operator_stack.top();
  104.                 operator_stack.pop();
  105.             }
  106.             operator_stack.push(infix_string[i]);
  107.         }
  108.         else if (infix_string[i] == '(') operator_stack.push(infix_string[i]);
  109.         else if (infix_string[i] == ')')
  110.         {
  111.             while (operator_stack.top() != '(')
  112.             {
  113.                 postfix_string+= operator_stack.top();
  114.                 operator_stack.pop();
  115.             }
  116.             operator_stack.pop();
  117.         }
  118.  
  119.         else postfix_string+=infix_string[i];
  120.         if(isdigit(infix_string[i])) digit_stack.push(infix_string[i]);
  121.     }
  122.  
  123.     while(!operator_stack.empty())
  124.     {
  125.         postfix_string+=operator_stack.top();
  126.         operator_stack.pop();
  127.     }
  128.  
  129.     string broj="";
  130.     long long int brojic=0;
  131.  
  132.     for(long long int i=0; i<postfix_string.length(); i++)
  133.     {
  134.         if(isdigit(postfix_string[i])) broj+=postfix_string[i];
  135.  
  136.         if(!isdigit(postfix_string[i]) && konvertaj_u_int(broj)!=0)
  137.         {
  138.             brojic=konvertaj_u_int(broj);
  139.             addition_stack.push(brojic);
  140.             broj="";
  141.         }
  142.  
  143.         if(postfix_string[i]=='*')
  144.         {
  145.             long long int prvi, drugi;
  146.             prvi=addition_stack.top();
  147.             addition_stack.pop();
  148.             drugi=addition_stack.top();
  149.             addition_stack.pop();
  150.             addition_stack.push(prvi*drugi);
  151.         }
  152.  
  153.         if(postfix_string[i]=='/')
  154.         {
  155.             long long int prvi, drugi;
  156.             prvi=addition_stack.top();
  157.             addition_stack.pop();
  158.             drugi=addition_stack.top();
  159.             addition_stack.pop();
  160.             addition_stack.push(drugi/prvi);
  161.         }
  162.  
  163.         if(postfix_string[i]=='+')
  164.         {
  165.             long long int prvi, drugi;
  166.             prvi=addition_stack.top();
  167.             addition_stack.pop();
  168.             drugi=addition_stack.top();
  169.             addition_stack.pop();
  170.             addition_stack.push(prvi+drugi);
  171.         }
  172.  
  173.         if(postfix_string[i]=='-')
  174.         {
  175.             long long int prvi, drugi;
  176.             prvi=addition_stack.top();
  177.             addition_stack.pop();
  178.             drugi=addition_stack.top();
  179.             addition_stack.pop();
  180.             addition_stack.push(drugi-prvi);
  181.         }
  182.     }
  183.     return addition_stack.top();
  184. }
Advertisement
Add Comment
Please, Sign In to add comment