SHARE
TWEET

Yolo

a guest Feb 25th, 2020 86 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.  
  2. #include <iostream>
  3. #include <limits.h>
  4. #include <string.h>
  5. #include <stdlib.h>
  6. using namespace std;
  7.  
  8. #define MAX_PAMAT 40
  9.  
  10. enum stav_zasobnika {OK=-1, FULL=INT_MAX, EMPTY=INT_MIN};
  11.  
  12. typedef struct {
  13.     int citatel,menovatel;
  14. } Zlomok;
  15.  
  16.  
  17. typedef struct {
  18.     Zlomok pamat[MAX_PAMAT];
  19.     int vrchol;
  20. } LIFO;
  21. /*
  22. void show(LIFO &zasobnik) {
  23.     cout<<"|";
  24.     for(int i=0; i<zasobnik.vrchol; i++){
  25.         cout << zasobnik.pamat[i].citatel<<"|" << zasobnik.pamat[i].menovatel<< ",";
  26.     }
  27.     cout<< endl;
  28. }
  29. */
  30. stav_zasobnika isFull(LIFO &zasobnik) {
  31.     if(zasobnik.vrchol==0) {
  32.         return FULL;
  33.     }
  34.     return OK;
  35. }
  36.  
  37. stav_zasobnika push(LIFO &zasobnik,Zlomok x) {
  38.  
  39.  
  40.     if(zasobnik.vrchol<MAX_PAMAT)
  41.  
  42.         zasobnik.pamat[zasobnik.vrchol++]=x;
  43.  
  44.     else
  45.  
  46.         return FULL;
  47.  
  48.     return OK;
  49.  
  50. }
  51. Zlomok pop(LIFO &zasobnik) {
  52.  
  53.     if(zasobnik.vrchol>0)
  54.  
  55.         return zasobnik.pamat[--zasobnik.vrchol];
  56.  
  57.     else
  58.  
  59.         return zasobnik.pamat[0];
  60.  
  61. }
  62. Zlomok add(Zlomok a,Zlomok b){
  63.     Zlomok c;
  64.     c.citatel = a.citatel*b.menovatel+b.citatel*a.menovatel;
  65.     c.menovatel = a.menovatel*b.menovatel;
  66.     return c;
  67.   }
  68. Zlomok mult(Zlomok a,Zlomok b){
  69.     Zlomok c;
  70.     c.citatel = a.citatel*b.citatel;
  71.     c.menovatel = a.menovatel*b.menovatel;
  72.     return c;
  73.   }
  74.   Zlomok div(Zlomok a,Zlomok b){
  75.     Zlomok c;
  76.     c.citatel = a.citatel*b.menovatel;
  77.     c.menovatel = a.menovatel*b.citatel;
  78.     return c;
  79.     }
  80.  
  81. Zlomok sub(Zlomok a, Zlomok b) {
  82.     Zlomok c;
  83.     c.citatel = a.citatel*b.menovatel-b.citatel*a.menovatel;
  84.     c.menovatel = a.menovatel*b.menovatel;
  85.     return c;
  86. }
  87.  
  88. int main() {
  89.     LIFO f;
  90.     f.vrchol=0;
  91.     Zlomok x;
  92.     int i,j,N;
  93.     Zlomok a,b;
  94.     char vyraz[40], buffer[20];
  95.     cin.getline(vyraz,39);
  96.     N=(int)strlen(vyraz);
  97.  
  98.     for(i=0; i<N; i++) {
  99.         if (vyraz[i]==' ') {
  100.             continue;
  101.         }
  102.         if (vyraz[i]=='+') {
  103.             a = pop(f);
  104.             b = pop(f);
  105.             push(f, add(a,b));
  106.             continue;
  107.         }
  108.         if (vyraz[i]=='*') {
  109.             a = pop(f);
  110.             b = pop(f);
  111.             push(f, mult(a,b));
  112.             continue;
  113.         }
  114.         if (vyraz[i]=='/') {
  115.             a = pop(f);
  116.             b = pop(f);
  117.             push(f, div(a,b));
  118.             continue;
  119.         }
  120.         if (vyraz[i]=='-') {
  121.             a = pop(f);
  122.             b = pop(f);
  123.             push(f, sub(a,b));
  124.             continue;
  125.         }
  126.         j=0;
  127.         x.citatel = 0;
  128.         x.menovatel = 1;
  129.  
  130.         while((vyraz[i]>='0' && vyraz[i]<='9')) {
  131.             buffer[j] = vyraz[i];
  132.             i++;
  133.             j++;
  134.         }
  135.         buffer[j]=0;
  136.         x.citatel = atoi(buffer);
  137.         if (vyraz[i]=='|') {
  138.             i++;
  139.             j = 0;
  140.             while((vyraz[i]>='0' && vyraz[i]<='9')) {
  141.                 buffer[j] = vyraz[i];
  142.                 i++;
  143.                 j++;
  144.         }
  145.         buffer[j]=0;
  146.         x.menovatel = atoi(buffer);
  147.         }
  148.         if(FULL == push(f,x)) {
  149.             cout<<"LIFO overflow";
  150.             break;
  151.         }
  152.     }
  153.     x = pop(f);
  154.     cout << x.citatel <<"|" <<x.menovatel;
  155.     return 0;
  156. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
Top