1+ #include " SetLab5_Kudashov.h"
2+ // Проверка на пустое множество
3+ bool SetSetContainer::emptySet () {
4+ return set.empty ();
5+ }
6+ // Проверка принадлежности элемента множеству
7+ bool SetSetContainer::checkingOfExistence (int checking_value) {
8+ return set.find (checking_value) != set.end ();
9+ }
10+ // Добавление нового элемента в множество в начало списка
11+ void SetSetContainer::add (int adding_value) {
12+ if (!checkingOfExistence (adding_value))
13+ set.insert (set.begin (), adding_value);
14+ }
15+ // Мощность множества
16+ int SetSetContainer::powerOfTheSet () {
17+ return set.size ();
18+ }
19+ // Создание нового множества
20+ SetSetContainer SetSetContainer::creatingSet (int quantity, int min, int max, int k) {
21+ SetSetContainer set = *new SetSetContainer ();
22+ // k - коэффициент кратности
23+ // Множество А – множество чисел, кратных 5. Множество В – множество чисел, кратных 10.
24+ if (k*quantity <= max - min + 1 ){
25+ while (set.powerOfTheSet () < quantity){
26+ int temp = rand () % (max-min+1 ) + min;
27+ if (temp % k == 0 )
28+ set.add (temp);
29+ }
30+ }
31+ else
32+ cout << " It is impossible to create a set according to the specified conditions!" << endl;
33+ return set;
34+ }
35+ // Вывод элементов множества
36+ string SetSetContainer::printSet (const string &separator) {
37+ if (this ->emptySet ()) return " It is impossible to output an empty set!" ;
38+ string print;
39+ for (auto iter = set.begin (); iter != set.end (); iter++)
40+ print += to_string (*iter) + separator;
41+ print.pop_back ();
42+ print.pop_back ();
43+ return print;
44+ }
45+ // Удаление множества
46+ void SetSetContainer::deleteSet () {
47+ set.clear ();
48+ }
49+ // Является ли A подмножеством B
50+ bool SetSetContainer::isSubset (SetSetContainer a, SetSetContainer b) {
51+ return includes (a.set .begin (), a.set .end (), b.set .begin (), b.set .end ());
52+ }
53+ // Проверка множеств на равенство
54+ bool SetSetContainer::isEqual (SetSetContainer a, SetSetContainer b) {
55+ return a.set == b.set ;
56+ }
57+
58+ // Объединение множеств
59+ SetSetContainer SetSetContainer::combiningSets (SetSetContainer a, SetSetContainer b) {
60+ if (a.emptySet () || b.emptySet ())
61+ return *new SetSetContainer ();
62+ SetSetContainer c = a;
63+ for (int iter: b.set )
64+ if (!c.checkingOfExistence (iter))
65+ c.add (iter);
66+ return c;
67+ }
68+ // Пересечение множеств
69+ SetSetContainer SetSetContainer::intersectionOfSets (SetSetContainer a, SetSetContainer b) {
70+ if (a.emptySet () || b.emptySet ())
71+ return *new SetSetContainer ();
72+ SetSetContainer c = *new SetSetContainer ();
73+ for (int iter: a.set )
74+ if (b.checkingOfExistence (iter))
75+ c.add (iter);
76+ return c;
77+ }
78+ // Разность множеств
79+ SetSetContainer SetSetContainer::differenceOfSets (SetSetContainer a, SetSetContainer b) {
80+ SetSetContainer c = *new SetSetContainer ();
81+ for (int iter: a.set )
82+ if (!b.checkingOfExistence (iter))
83+ c.add (iter);
84+ return c;
85+ }
86+ // Симметричная разность множеств
87+ SetSetContainer SetSetContainer::symmetricDifferenceOfSets (SetSetContainer a, SetSetContainer b) {
88+ if (intersectionOfSets (a,b).emptySet ()) return combiningSets (a,b);
89+ return differenceOfSets (combiningSets (a,b), intersectionOfSets (a,b));
90+ }
91+ /*
92+ // Объединение множеств
93+ SetSetContainer SetSetContainer::combiningSets(SetSetContainer a, SetSetContainer b) {
94+ if (a.emptySet() || b.emptySet())
95+ return *new SetSetContainer();
96+ SetSetContainer c = *new SetSetContainer();
97+ merge(a.set.begin(), a.set.end(), b.set.begin(), b.set.end(), inserter(c.set,c.set.begin()));
98+ return c;
99+ }
100+ // Пересечение множеств
101+ SetSetContainer SetSetContainer::intersectionOfSets(SetSetContainer a, SetSetContainer b) {
102+ if (a.emptySet() || b.emptySet())
103+ return *new SetSetContainer();
104+ SetSetContainer c = *new SetSetContainer();
105+ set_intersection(a.set.begin(), a.set.end(), b.set.begin(), b.set.end(), inserter(c.set,c.set.begin()));
106+ return c;
107+ }
108+ // Разность множеств
109+ SetSetContainer SetSetContainer::differenceOfSets(const SetSetContainer &a, SetSetContainer b) {
110+ SetSetContainer c = *new SetSetContainer();
111+ set_difference(a.set.begin(), a.set.end(), b.set.begin(), b.set.end(), inserter(c.set,c.set.begin()));
112+ return c;
113+ }
114+ // Симметричная разность множеств
115+ SetSetContainer SetSetContainer::symmetricDifferenceOfSets(const SetSetContainer &a, const SetSetContainer &b) {
116+ SetSetContainer c = *new SetSetContainer();
117+ set_symmetric_difference(a.set.begin(), a.set.end(), b.set.begin(), b.set.end(), inserter(c.set,c.set.begin()));
118+ return c;
119+ }*/
0 commit comments