aLT22

4semlab1 (C++) FINAL VERS

Apr 14th, 2015
239
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 7.69 KB | None | 0 0
  1. /* 
  2.     Разработать класс "Множество"
  3.     определить конструкторы и деструктор done
  4.     переопределить операции объединения, пересечения и разности двух множеств, методы для организации ввода-вывода
  5.     написать методы проверки включения одного мн-ва в другое, проверки равенства двух мн-в, проверки пустоты двух мн-в
  6. */
  7. #include <iostream>
  8. #include <vector>
  9.  
  10. using namespace std;
  11.  
  12. class Multiplicity {
  13.     private:
  14.         vector <int> many_one;
  15.     public:
  16.         Multiplicity(int n) {
  17.             cout << "Введите множество: ";
  18.             int elem_in = 0;
  19.             for (int i = 0; i < n; i++) {
  20.                 cin >> elem_in;
  21.                 many_one.push_back(elem_in);
  22.             }
  23.         }
  24.         Multiplicity() {
  25.             many_one.clear();
  26.         }
  27.         ~Multiplicity() {
  28.             many_one.clear();
  29.         }
  30.         Multiplicity operator+ (Multiplicity t) {
  31.             Multiplicity result;
  32.             //result.many_one.clear();
  33.             if (many_one.size() == t.many_one.size()) {
  34.                 for (int i = 0; i < many_one.size(); i++) {
  35.                     result.many_one.push_back(many_one[i]);
  36.                 }
  37.                 for (int i = 0; i < t.many_one.size(); i++) {
  38.                     result.many_one.push_back(t.many_one[i]);
  39.                 }
  40.                 return result;
  41.             } else if (many_one.size() > t.many_one.size()) {
  42.                 for (int i = 0; i < t.many_one.size(); i++) {
  43.                     result.many_one.push_back(t.many_one[i]);
  44.                 }
  45.                 for (int i = 0; i < many_one.size(); i++) {
  46.                     result.many_one.push_back(many_one[i]);
  47.                 }
  48.                 return result;
  49.             } else {
  50.                 for (int i = 0; i < many_one.size(); i++) {
  51.                     result.many_one.push_back(many_one[i]);
  52.                 }
  53.                 for (int i = 0; i < t.many_one.size(); i++) {
  54.                     result.many_one.push_back(t.many_one[i]);
  55.                 }
  56.                 return result;
  57.             }
  58.         }
  59.         Multiplicity operator* (Multiplicity t) {
  60.             Multiplicity result;
  61.             result.many_one.clear();
  62.             if (many_one.size() == t.many_one.size()) {
  63.                 for (int i = 0; i < many_one.size(); i++) {
  64.                     if (many_one[i] == t.many_one[i]) {
  65.                         result.many_one.push_back(many_one[i]);
  66.                     }
  67.                 }
  68.                 return result;
  69.             } else if (many_one.size() < t.many_one.size()) {
  70.                 for (int i = 0; i < many_one.size(); i++) {
  71.                     if (many_one[i] == t.many_one[i]) {
  72.                         result.many_one.push_back(many_one[i]);
  73.                     }
  74.                 }
  75.                 return result;
  76.             } else {
  77.                 for (int i = 0; i < t.many_one.size(); i++) {
  78.                     if (many_one[i] == t.many_one[i]) {
  79.                         result.many_one.push_back(many_one[i]);
  80.                     }
  81.                 }
  82.                 return result;
  83.             }
  84.         }
  85.         // Не реализована (разность двух множеств)
  86.         Multiplicity operator/ (Multiplicity t) {
  87.             Multiplicity result;
  88.             int temp = 0;
  89.             for (int i = 0; i < many_one.size(); i++) {
  90.                 for (int j = 0; j < t.many_one.size(); j++) {
  91.                     if (many_one[i] == t.many_one[j]) {
  92.                         temp++;
  93.                     }
  94.                 }
  95.                 if (!temp) {
  96.                     result.many_one.push_back(many_one[i]);
  97.                 }
  98.                 temp = 0;
  99.             }
  100.             return result;
  101.         }
  102.         void getMany() {
  103.             for (int i = 0; i < many_one.size(); i++) {
  104.                 cout << many_one[i] << ' ';
  105.             }
  106.             cout << endl;
  107.         }
  108.         bool multiplicity_equal(Multiplicity t); // Сравнение двух множеств
  109.         bool isEmpty(); // Проверка на пустоту множества
  110.         bool isEncluded(Multiplicity t); // Проверка на включение множества в другое множество
  111. };
  112.  
  113. /* Реализация некоторых методов класса Multiplicity */
  114. bool Multiplicity :: multiplicity_equal(Multiplicity t) {
  115.     bool check = true;
  116.     if (many_one.size() == t.many_one.size()) {
  117.         for (int i = 0; i < many_one.size(); i++) {
  118.             if (many_one[i] == t.many_one[i]) {}
  119.             else {
  120.                 check = false;
  121.                 break;
  122.             }
  123.         }
  124.         return check;
  125.     } else
  126.         return false;
  127. }
  128.  
  129. bool Multiplicity :: isEmpty() {
  130.     if (many_one.size())
  131.         return true;
  132.     else
  133.         return false;
  134. }
  135.  
  136. bool Multiplicity :: isEncluded(Multiplicity t) {
  137.     int counter = 0;
  138.     if (many_one.size() == t.many_one.size()) {
  139.         for (int i = 0; i < many_one.size(); i++) {
  140.             for (int j = 0; j < t.many_one.size(); j++) {
  141.                 if (many_one[i] == t.many_one[j]) {
  142.                     counter++;
  143.                 }
  144.             }
  145.             if (counter) {
  146.                 //break;
  147.                 return false;
  148.             }
  149.         }
  150.         if (counter == many_one.size()) {
  151.             cout << "Множества равны! " << endl;
  152.             return true;
  153.         } else
  154.             return false;
  155.     } else if (many_one.size() < t.many_one.size()) {
  156.         for (int i = 0; i < many_one.size(); i++) {
  157.             for (int j = 0; j < t.many_one.size(); j++) {
  158.                 if (many_one[i] == t.many_one[j]) {
  159.                     counter++;
  160.                 }
  161.             }
  162.         }
  163.         if (counter == many_one.size()) {
  164.             cout << "Первое множество содержится во втором!" << endl;
  165.             return true;
  166.         } else
  167.             return false;
  168.     } else {
  169.         for (int i = 0; i < t.many_one.size(); i++) {
  170.             for (int j = 0; j < many_one.size(); j++) {
  171.                 if (t.many_one[i] == many_one[j]) {
  172.                     counter++;
  173.                 }
  174.             }
  175.         }
  176.         if (counter == t.many_one.size()) {
  177.             cout << "Второе множество содержится в первом! " << endl;
  178.             return true;
  179.         } else
  180.             return false;
  181.     }
  182. }
  183.  
  184. int main() {
  185.     setlocale(LC_ALL, "Russian");
  186.     int n = 0;
  187.     cout << "Введите размерность первого множества: "; cin >> n;
  188.     Multiplicity multiplicity_one(n);
  189.     cout << "\nВведите размерность второго множества: "; cin >> n;
  190.     Multiplicity multiplicity_two(n);
  191.     if (!multiplicity_one.isEmpty() && !multiplicity_two.isEmpty()) {
  192.         cout << "Оба множества пустые! " << "\nВведите заново значения!\n";
  193.         main();
  194.     }
  195.     else if (!multiplicity_two.isEmpty()) {
  196.         cout << "Второе множество пустое! ";
  197.     }
  198.     else {
  199.         cout << "Первое множество пустое! ";
  200.     }
  201.     char choice;
  202.     cout << "Выберите, что хотите сделать с множествами:\n***Объединение множеств --- +\n***Пересечение множеств --- *\n***Сравнение двух множеств --- =\n***Включение одного множества во второе --- %\n***Разность двух множеств --- /\nВаш ввод: ";
  203.     cin >> choice;
  204.     Multiplicity result;
  205.     bool choice_operand = false;
  206.     switch (choice) {
  207.         case ('+'):
  208.             result = multiplicity_one + multiplicity_two;
  209.             cout << "Объединение двух множеств равно: ";
  210.             result.getMany();
  211.             break;
  212.         case ('*'):
  213.             result = multiplicity_one * multiplicity_two;
  214.             cout << "Пересечение двух множеств равно: ";
  215.             result.getMany();
  216.             break;
  217.         case ('='):
  218.             if (multiplicity_one.multiplicity_equal(multiplicity_two)) {
  219.                 cout << "Введенные множества равны! ";
  220.                 break;
  221.             } else {
  222.                 cout << "Введенные множества не равны! ";
  223.                 break;
  224.             }
  225.         case ('%'):
  226.             multiplicity_one.isEncluded(multiplicity_two);
  227.         case ('/'):
  228.             cout << "Выберите, из какого множества хотите вычесть (из первого второе --- 0, из вторго первое --- 1): ";
  229.             cin >> choice_operand;
  230.             cout << "\nРезультат вычитания: ";
  231.             if (!choice_operand) {
  232.                 result = multiplicity_one / multiplicity_two;
  233.                 result.getMany();
  234.             } else {
  235.                 result = multiplicity_two / multiplicity_one;
  236.                 result.getMany();
  237.             }
  238.     }
  239.     char final_choice;
  240.     cout << "Чтобы продолжить работу, нажмите 1: "; cin >> final_choice;
  241.     if (final_choice == '1') {
  242.         main();
  243.     } else {
  244.         system("pause");
  245.         return 0;
  246.     }
  247. }
Advertisement
Add Comment
Please, Sign In to add comment