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