aLT22

4semlab4 (C++) ALPHA VERS

Mar 30th, 2015
230
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.83 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.            
  87.         }
  88.         void getMany() {
  89.             for (int i = 0; i < many_one.size(); i++) {
  90.                 cout << many_one[i] << ' ';
  91.             }
  92.             cout << endl;
  93.         }
  94.         bool multiplicity_equal(Multiplicity t); // Сравнение двух множеств
  95.         bool isEmpty(); // Проверка на пустоту множества
  96.         bool isEncluded(Multiplicity t); // Проверка на включение множества в другое множество
  97. };
  98.  
  99. /* Реализация некоторых методов класса Multiplicity */
  100. bool Multiplicity :: multiplicity_equal(Multiplicity t) {
  101.     bool check = true;
  102.     if (many_one.size() == t.many_one.size()) {
  103.         for (int i = 0; i < many_one.size(); i++) {
  104.             if (many_one[i] == t.many_one[i]) {}
  105.             else {
  106.                 check = false;
  107.                 break;
  108.             }
  109.         }
  110.         return check;
  111.     } else
  112.         return false;
  113. }
  114.  
  115. bool Multiplicity :: isEmpty() {
  116.     if (many_one.size())
  117.         return true;
  118.     else
  119.         return false;
  120. }
  121.  
  122. bool Multiplicity :: isEncluded(Multiplicity t) {
  123.     int counter = 0;
  124.     if (many_one.size() == t.many_one.size()) {
  125.         for (int i = 0; i < many_one.size(); i++) {
  126.             for (int j = 0; j < t.many_one.size(); j++) {
  127.                 if (many_one[i] == t.many_one[j]) {
  128.                     counter++;
  129.                 }
  130.             }
  131.             if (counter) {
  132.                 //break;
  133.                 return false;
  134.             }
  135.         }
  136.         if (counter == many_one.size()) {
  137.             cout << "Множества равны! " << endl;
  138.             return true;
  139.         } else
  140.             return false;
  141.     } else if (many_one.size() < t.many_one.size()) {
  142.         for (int i = 0; i < many_one.size(); i++) {
  143.             for (int j = 0; j < t.many_one.size(); j++) {
  144.                 if (many_one[i] == t.many_one[j]) {
  145.                     counter++;
  146.                 }
  147.             }
  148.         }
  149.         if (counter == many_one.size()) {
  150.             cout << "Первое множество содержится во втором!" << endl;
  151.             return true;
  152.         } else
  153.             return false;
  154.     } else {
  155.         for (int i = 0; i < t.many_one.size(); i++) {
  156.             for (int j = 0; j < many_one.size(); j++) {
  157.                 if (t.many_one[i] == many_one[j]) {
  158.                     counter++;
  159.                 }
  160.             }
  161.         }
  162.         if (counter == t.many_one.size()) {
  163.             cout << "Второе множество содержится в первом! " << endl;
  164.             return true;
  165.         } else
  166.             return false;
  167.     }
  168. }
  169.  
  170. int main() {
  171.     setlocale(LC_ALL, "Russian");
  172.     int n = 0;
  173.     cout << "Введите размерность первого множества: "; cin >> n;
  174.     Multiplicity multiplicity_one(n);
  175.     cout << "\nВведите размерность второго множества: "; cin >> n;
  176.     Multiplicity multiplicity_two(n);
  177.     if (!multiplicity_one.isEmpty() && !multiplicity_two.isEmpty()) {
  178.         cout << "Оба множества пустые! " << "\nВведите заново значения!\n";
  179.         main();
  180.     }
  181.     else if (!multiplicity_two.isEmpty()) {
  182.         cout << "Второе множество пустое! ";
  183.     }
  184.     else {
  185.         cout << "Первое множество пустое! ";
  186.     }
  187.     char choice;
  188.     cout << "Выберите, что хотите сделать с множествами:\n***Объединение множеств --- +\n***Пересечение множеств --- *\n***Сравнение двух множеств --- =\n***Включение одного множества во второе --- %\nВаш ввод: ";
  189.     cin >> choice;
  190.     Multiplicity result;
  191.     switch (choice) {
  192.         case ('+'):
  193.             result = multiplicity_one + multiplicity_two;
  194.             cout << "Объединение двух множеств равно: ";
  195.             result.getMany();
  196.             break;
  197.         case ('*'):
  198.             result = multiplicity_one * multiplicity_two;
  199.             cout << "Пересечение двух множеств равно: ";
  200.             result.getMany();
  201.             break;
  202.         case ('='):
  203.             if (multiplicity_one.multiplicity_equal(multiplicity_two)) {
  204.                 cout << "Введенные множества равны! ";
  205.                 break;
  206.             } else {
  207.                 cout << "Введенные множества не равны! ";
  208.                 break;
  209.             }
  210.         case ('%'):
  211.             multiplicity_one.isEncluded(multiplicity_two);
  212.     }
  213.     char final_choice;
  214.     cout << "Чтобы продолжить работу, нажмите 1: "; cin >> final_choice;
  215.     if (final_choice == '1') {
  216.         main();
  217.     } else {
  218.         system("pause");
  219.         return 0;
  220.     }
  221. }
Advertisement
Add Comment
Please, Sign In to add comment