aLT22

4semlab4 (C++) BETTA VERS

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