Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <conio.h>
- #include <string.h>
- using namespace std;
- //Объявление класса "Множество":
- template <class T>
- class set
- {
- private:
- T *a;
- int max_size;
- int size;
- public:
- //Конструкторы:
- set(int maxim);
- set(set <T> &x);
- //Деструктор:
- ~set();
- void add(T x);//добавление эл-та в множество
- bool check_in(T x);//проверка вхождения эл-та в множество
- void output();//Вывод множества на экран
- set<T> operator= (const set <T> &s);//операция: присвоение одного множества другому
- set<T> operator* (set <T> &s2);//операция: пересечение двух множеств
- };
- void menu();
- void main()
- {
- setlocale(LC_ALL, "Russian");
- cout << "Добро пожаловать в программу!" << endl;
- menu();
- }
- void menu()
- {
- bool p1, p2; p1 = p2 = true;
- char n;
- char choose;
- int max_1, max_2;
- cout << "Введите максимальный размер первого множества: ";
- cin >> max_1;
- cout << "Введите максимальный размер второго множества: ";
- cin >> max_2;
- set <int> set1(max_1);
- set <int> set2(max_2);
- set <int> set3(max_1+max_2);
- int x;
- do {
- cout << '\n'
- << "Меню:"
- << '\n' << "1. Добавление эл-та в множество"
- << '\n' << "5. Пересечение двух множеств"
- << '\n' << "0. Выход"
- << '\n' << "<";
- cin >> n;
- system("cls");
- switch (n)
- {
- case '1':cout << "Выберите множество для добавления (1 или 2): ";
- cin >> choose;
- if (choose == '1')
- {
- if (p1 == true)
- {
- for (int i = 0; i < max_1; i++)
- {
- cout << "Введите э-т: ";
- cin >> x;
- set1.add(x);
- }
- cout << "Получившееся множество 1" << endl;
- set1.output();
- cout << " " << endl;
- p1 = false;
- }
- else { cout << "Вы уже ввели множество 1" << endl; set1.output(); }
- }
- if (choose == '2')
- {
- if (p2 == true){
- for (int i = 0; i < max_2; i++)
- {
- cout << "Введите э-т: ";
- cin >> x;
- set2.add(x);
- }
- cout << "Получившееся множество 2" << endl;
- set2.output();
- cout << " " << endl;
- p2 = false;
- }
- else { cout << "Вы уже ввели множество 2" << endl; set2.output(); }
- }
- break;
- case '5':set3 = (set1*set2);
- cout << "Исходное множество 1" << endl;
- set1.output();
- cout << "Исходное множество 2" << endl;
- set2.output();
- cout << "Получившееся множество 3" << endl;
- set3.output();
- cout << " " << endl;
- break;
- case '0':return;
- default:cout << "Действие не выбрано";
- }
- } while (true);
- }
- template <class T>
- bool set <T>::check_in(T x)
- {
- for (int i = 0; i<size; i++)
- if (a[i] == x)
- return true;
- return false;
- }
- template <class T>
- void set<T> ::add(T x)
- {
- if (size<max_size)
- {
- if (!check_in(x))
- {
- a[size] = x;
- size += 1;
- cout << "Добавление прошло успешно" << endl;
- }
- else
- {
- cout << "Добавление невозможно!!!" << endl;
- cout << "Одинаковые элементы содержаться в множестве только один раз!!!" << endl;
- }
- }
- else
- {
- cout << "Добавление невозможно" << endl;
- cout << "Размер множества не соответствует количеству элементов!!!" << endl;
- }
- }
- template <class T>
- void set<T>::output()
- {
- if (size == 0)
- {
- cout << "{}";
- return;
- }
- cout << "{" << a[0];
- for (int i = 1; i<size; i++)
- cout << ", " << a[i];
- cout << "}" << endl;
- }
- template <class T>
- set<T> set<T>:: operator* ( set <T> &s2)
- {
- int k;
- k = 0;
- set <T> s(max_size);
- s.size = 1;
- for (int i = 0; i < size; i++)
- cout << a[i] << " ";
- cout << endl;
- for (int j = 0; j < s2.size; j++)
- cout << s2.a[j] << " ";
- cout << endl;
- for (int i = 0; i < size; i++)
- {
- for (int j = 0; j < s2.size; j++)
- if (s2.a[j] == a[i])
- {
- s.size += 1;
- s.a[k] = s2.a[j];
- k++;
- s.size += 1;
- }
- }
- return s;
- }
- template <class T>
- set<T> set<T>:: operator= (const set <T> &s)
- {
- if (this == &s)
- return *this;
- if (max_size != s.max_size)
- {
- delete[]a;
- a = new T[s.max_size];
- size = 0;
- max_size = s.max_size;
- }
- for (int i = 0; i<max_size; i++)
- {
- a[i] = s.a[i];
- }
- size = s.size;
- return *this;
- }
- template <class T>
- set<T>::set(int maxim)
- {
- a = new T[maxim];
- for (int i = 0; i<maxim; i++)
- a[i] = 0;
- max_size = maxim;
- size = 0;
- }
- template <class T>
- set<T>::set(set<T> &x)
- {
- max_size = x.max_size;
- a = new T[max_size];
- for (int i = 0; i<max_size; i++)
- a[i] = x.a[i];
- }
- template <class T>
- set<T>::~set()
- {
- delete[]a;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement