Advertisement
Guest User

aaaa

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