Advertisement
Ser1ousSAM

DM

Sep 24th, 2022
46
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.25 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3. #include <vector>
  4. #include <set>
  5. #include <conio.h>
  6.  
  7. using namespace std;
  8.  
  9. set<string> U;
  10.  
  11. //Union
  12. set<string> operator + (set<string> s1, set<string> s2) {
  13. set<string> res;
  14. for (auto i : s1)
  15. res.insert(i);
  16. for (auto i : s2)
  17. res.insert(i);
  18. return res;
  19. }
  20. //Intersection
  21. set<string> operator * (set<string> s1, set<string> s2) {
  22. set<string> res;
  23. for (auto i : s1)
  24. if (s2.contains(i))
  25. res.insert(i);
  26. return res;
  27. }
  28. //Addition
  29. set<string> operator ~ (set<string> s1) {
  30. set<string> res;
  31. for (auto i : U)
  32. if (!s1.contains(i))
  33. res.insert(i);
  34. return res;
  35. }
  36. //Difference
  37. set<string> operator / (set<string> s1, set<string> s2) {
  38. set<string> res = s1;
  39. for (auto i : s1)
  40. if (s2.contains(i))
  41. res.erase(i);
  42. return res;
  43. }
  44. //Simmetric difference
  45. set<string> operator || (set<string> s1, set<string> s2) {
  46. return (s1 / s2) + (s2 / s1);
  47. }
  48. int correctInput(int n) {
  49. while (true) {
  50. string temp;
  51. cin >> temp;
  52. n = atoi(temp.c_str());
  53. if (n == 0)
  54. cout << "Power of set must be integer" << '\n';
  55. else if (n > 0 && n <= 25)
  56. break;
  57. else
  58. cout << "Power of set must be from 1 to 25 elements:" << '\n';
  59. }
  60. return n;
  61. }
  62.  
  63. void display(set<string>& s, string name) {
  64. int count = 0;
  65. cout << "\n--------------------" << '\n';
  66. cout << "Set " << name << '\n';
  67. for (const auto i : s) {
  68. count++;
  69. cout << i << " ";
  70. if (count % 2 == 0)
  71. cout << '\n';
  72. }
  73. cout << "\n--------------------" << '\n';
  74. }
  75.  
  76. void AddFromU(set<string>& s) {
  77. char input = 0;
  78. int numberOfEl = 0;
  79. vector<string> elems;
  80. for (auto i : U)
  81. elems.push_back(i);
  82. int sizeOfElems = elems.size();
  83. string temp;
  84.  
  85. cout << "Press an Q to stop filling set. Press Tab to switch elements and choose by Enter\n";
  86. while (s.size() < U.size()) {
  87. input = _getch();
  88. if (input == '\t')
  89. numberOfEl++;
  90. else if ((int)input == int('Q') || (int)input == int('q'))
  91. break;
  92. cout << "\r \r";
  93. if (numberOfEl == sizeOfElems)
  94. numberOfEl %= sizeOfElems;
  95. temp = elems[numberOfEl];
  96. cout << temp;
  97. if (input == '\r') {
  98. cout << '\n';
  99. s.insert(elems[numberOfEl]);
  100. elems.erase(elems.begin()+numberOfEl);
  101. sizeOfElems--;
  102. if (numberOfEl != 0)
  103. numberOfEl--;
  104. cout << "Power of current set = " << s.size() << "\n";
  105. }
  106. }
  107. }
  108.  
  109. int main() {
  110. cout << "Enter a power of U universum (including 25 lines):" << '\n';
  111. int n = 0;
  112. n = correctInput(n);
  113. cout << "Power of U = " << n << '\n';
  114. cout << "Fill an universum:" << '\n';
  115. for (int i = 0; i < n; i++) {
  116. cout << i+1 <<")";
  117. string temp;
  118. cin >> temp;
  119. U.insert(temp);
  120. }
  121. n = U.size();
  122. cout << "Power of U = " << n << '\n';
  123.  
  124. cout << "Fill set A" << '\n';
  125. set<string> A;
  126. AddFromU(A);
  127. display(A, "A");
  128. cout << "Power of A = " << A.size() << '\n';
  129.  
  130. cout << "Fill set B" << '\n';
  131. set<string> B;
  132. AddFromU(B);
  133. display(B, "B");
  134. cout << "Power of B = " << B.size() << '\n';
  135.  
  136. set<string> C = A + B, D = A * B, E = A / B, F = A || B, G = ~A;
  137. cout << "\n";
  138. display(C,"Union A, B");
  139. display(D, "Intersection A, B");
  140. display(E,"Difference A / B");
  141. display(F, "Simmetric difference or Union (A / B), (B / A)");
  142. display(G, "Addition U / A");
  143. }
  144.  
  145.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement