Advertisement
vencinachev

Zad2

May 28th, 2021 (edited)
974
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.45 KB | None | 0 0
  1. #include <iostream>
  2. #include <queue>
  3.  
  4. using namespace std;
  5.  
  6. bool isInteger(string s);
  7. int toInteger(string s);
  8. void inputQueue(queue<int>& q);
  9. void outputQueue(queue<int> q);
  10. bool containsElement(queue<int> q, int element);
  11. bool isSubset(queue<int> a, queue<int> b); // A is subset of B
  12.  
  13. queue<int> intersectQueues(queue<int> p, queue<int> q);
  14. queue<int> differencePQ(queue<int> p, queue<int> q);
  15. queue<int> complementPQ(queue<int> p, queue<int> q);
  16.  
  17. int main()
  18. {
  19.     queue<int> p, q, a, b, c;
  20.  
  21.     cout << "Enter P queue: ";
  22.     inputQueue(p);
  23.     cout << "Enter Q queue: ";
  24.     inputQueue(q);
  25.  
  26.     a = intersectQueues(p, q);
  27.     cout << "P ^ Q: ";
  28.     outputQueue(a);
  29.     cout << endl;
  30.  
  31.     b = differencePQ(p, q);
  32.     cout << "P - Q: ";
  33.     outputQueue(b);
  34.     cout << endl;
  35.  
  36.     c = complementPQ(p, q);
  37.     cout << "Compliment P, Q: ";
  38.     outputQueue(c);
  39.     cout << endl;
  40.  
  41.     return 0;
  42. }
  43.  
  44. bool isInteger(string s)
  45. {
  46.     bool state = true;
  47.     for (int i = 0; state && i < s.length(); i++)
  48.     {
  49.         if (i == 0 && s[i] == '-' &&  s.length() > 1)
  50.         {
  51.             continue;
  52.         }
  53.         if (!isdigit(s[i]))
  54.         {
  55.             state = false;
  56.         }
  57.     }
  58.  
  59.     return state;
  60. }
  61.  
  62. int toInteger(string s)
  63. {
  64.     int num = 0;
  65.     for (int i = 0; i < s.length(); i++)
  66.     {
  67.         if (i == 0 && s[i] == '-')
  68.         {
  69.             continue;
  70.         }
  71.         num = 10 * num + (s[i] - '0');
  72.     }
  73.     return (s[0] == '-') ? -num : num;
  74. }
  75.  
  76. void inputQueue(queue<int>& q)
  77. {
  78.     string input;
  79.     while(1)
  80.     {
  81.         cin >> input;
  82.  
  83.         if (isInteger(input))
  84.         {
  85.             q.push(toInteger(input));
  86.         }
  87.         else
  88.         {
  89.             return;
  90.         }
  91.     }
  92. }
  93.  
  94. void outputQueue(queue<int> q)
  95. {
  96.     if (q.empty())
  97.     {
  98.         cout << "Queue is empty!";
  99.         return;
  100.     }
  101.     while (!q.empty())
  102.     {
  103.         cout << q.front() << " ";
  104.         q.pop();
  105.     }
  106. }
  107.  
  108. bool containsElement(queue<int> q, int element)
  109. {
  110.     while(!q.empty())
  111.     {
  112.         if (q.front() == element)
  113.         {
  114.             return true;
  115.         }
  116.         q.pop();
  117.     }
  118.     return false;
  119. }
  120.  
  121. // A is subset of B
  122. bool isSubset(queue<int> a, queue<int> b)
  123. {
  124.     while(!a.empty())
  125.     {
  126.         if (!containsElement(b, a.front()))
  127.         {
  128.             return false;
  129.         }
  130.         a.pop();
  131.     }
  132.     return true;
  133. }
  134.  
  135.  
  136. queue<int> intersectQueues(queue<int> p, queue<int> q)
  137. {
  138.     queue<int> resultq;
  139.     while (!p.empty())
  140.     {
  141.         if (containsElement(q, p.front()))
  142.         {
  143.             resultq.push(p.front());
  144.         }
  145.         p.pop();
  146.     }
  147.     return resultq;
  148. }
  149.  
  150. queue<int> differencePQ(queue<int> p, queue<int> q)
  151. {
  152.     queue<int> resultq;
  153.     while (!p.empty())
  154.     {
  155.         if (!containsElement(q, p.front()))
  156.         {
  157.             resultq.push(p.front());
  158.         }
  159.         p.pop();
  160.     }
  161.     return resultq;
  162. }
  163.  
  164. queue<int> complementPQ(queue<int> p, queue<int> q)
  165. {
  166.     queue<int> resultq;
  167.     if (isSubset(p, q)) // p is subset of q
  168.     {
  169.         while (!q.empty())
  170.         {
  171.             if (!containsElement(p, q.front()))
  172.             {
  173.                 resultq.push(q.front());
  174.             }
  175.             q.pop();
  176.         }
  177.     }
  178.     else if (isSubset(q, p)) // q is subset of p
  179.     {
  180.         while (!p.empty())
  181.         {
  182.             if (!containsElement(q, p.front()))
  183.             {
  184.                 resultq.push(p.front());
  185.             }
  186.             p.pop();
  187.         }
  188.     }
  189.     return resultq;
  190. }
  191.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement