Advertisement
Madalina_Cirstea

ASD 1.4) b-evaluarea exp. RPN

Oct 21st, 2018
120
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.49 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3. #include <string.h>
  4. using namespace std;
  5. ifstream f ("date.in");
  6.  
  7. int main()
  8. {
  9.  
  10.     int k=0,stiv[100];
  11.     char cif[11]="0123456789",ch;
  12.  
  13.     //vom citi din fisierul f, caracter cu caracter, expresia RPN
  14.     while (f>>ch)
  15.     {
  16.         //daca variabila ch retine o cifra, o vom converti la int si o vom adauga in stiva stiv
  17.         if (strchr(cif,ch)!=0)
  18.             stiv[++k]=ch-'0';
  19.  
  20.         //daca variabila ch retine simbolul operatiei pe biti ~, vom aplica operatia ~ elemntului aflat pe pozitia k in stiva stiv
  21.         else if (ch=='~')
  22.             stiv[k]=~stiv[k];
  23.         else
  24.         {
  25.             //daca variabila ch retine simbolul operatiei {-,+,*,/}, vom aplica operatia respectiva elemntelor aflate pe pozitia k-1 si k in stiva stiv
  26.             //rezultatul se va retine in stiv[k-1] si numarul elementelor din stiva va scadea cu o unitate
  27.             if (ch=='-')
  28.             {
  29.                 stiv[k-1]=stiv[k-1]-stiv[k];
  30.                 k--;
  31.             }
  32.             else if (ch=='+')
  33.             {
  34.                 stiv[k-1]=stiv[k-1]+stiv[k];
  35.                 k--;
  36.             }
  37.             else if (ch=='*')
  38.             {
  39.                 stiv[k-1]=stiv[k-1]*stiv[k];
  40.                 k--;
  41.             }
  42.             else if (ch=='/')
  43.             {
  44.                 stiv[k-1]=stiv[k-1]/stiv[k];
  45.                 k--;
  46.             }
  47.         }
  48.     }
  49.     //stiv[1] reprezinta valoarea expresiei RPN
  50.     cout<<stiv[1]<<" ";
  51. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement