Advertisement
Guest User

Untitled

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