Skip to content

Commit 9a06cee

Browse files
authored
Laboratory work 5
1 parent c9f256e commit 9a06cee

27 files changed

+3130
-0
lines changed

Set_Cont_Set_Kudashov/CMakeLists.txt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
cmake_minimum_required(VERSION 3.21)
2+
project(Set_Cont_Set_Kudashov)
3+
4+
set(CMAKE_CXX_STANDARD 20)
5+
6+
add_executable(Set_Cont_Set_Kudashov Set_Cont_Set_Kudashov.cpp SetLab5_Kudashov.cpp SetLab5_Kudashov.h)
Lines changed: 119 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,119 @@
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+
}*/
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
#ifndef SET_CONT_SET_KUDASHOV_SETLAB5_KUDASHOV_H
2+
#define SET_CONT_SET_KUDASHOV_SETLAB5_KUDASHOV_H
3+
#include <iostream>
4+
#include <set>
5+
using namespace std;
6+
7+
class SetSetContainer {
8+
private:
9+
set <int> set;
10+
public:
11+
// Ïðîâåðêà íà ïóñòîå ìíîæåñòâî
12+
bool emptySet();
13+
// Ïðîâåðêà ïðèíàäëåæíîñòè ýëåìåíòà ìíîæåñòâó
14+
bool checkingOfExistence(int checking_value);
15+
// Äîáàâëåíèå íîâîãî ýëåìåíòà â ìíîæåñòâî â íà÷àëî ñïèñêà
16+
void add(int adding_value);
17+
// Ìîùíîñòü ìíîæåñòâà
18+
int powerOfTheSet();
19+
// Ñîçäàíèå íîâîãî ìíîæåñòâà
20+
static SetSetContainer creatingSet(int quantity, int min, int max, int k);
21+
// Âûâîä ýëåìåíòîâ ìíîæåñòâà
22+
string printSet(const string& separator);
23+
// Óäàëåíèå ìíîæåñòâà
24+
void deleteSet();
25+
// ßâëÿåòñÿ ëè A ïîäìíîæåñòâîì B
26+
static bool isSubset(SetSetContainer a, SetSetContainer b);
27+
// Ïðîâåðêà ìíîæåñòâ íà ðàâåíñòâî
28+
static bool isEqual(SetSetContainer a, SetSetContainer b);
29+
// Îáúåäèíåíèå ìíîæåñòâ
30+
static SetSetContainer combiningSets(SetSetContainer a, SetSetContainer b);
31+
// Ïåðåñå÷åíèå ìíîæåñòâ
32+
static SetSetContainer intersectionOfSets(SetSetContainer a, SetSetContainer b);
33+
// Ðàçíîñòü ìíîæåñòâ
34+
static SetSetContainer differenceOfSets(SetSetContainer a, SetSetContainer b);
35+
// Ñèììåòðè÷íàÿ ðàçíîñòü ìíîæåñòâ
36+
static SetSetContainer symmetricDifferenceOfSets(SetSetContainer a, SetSetContainer b);
37+
/*
38+
// Îáúåäèíåíèå ìíîæåñòâ
39+
static SetSetContainer combiningSets(SetSetContainer a, SetSetContainer b);
40+
// Ïåðåñå÷åíèå ìíîæåñòâ
41+
static SetSetContainer intersectionOfSets(SetSetContainer a, SetSetContainer b);
42+
// Ðàçíîñòü ìíîæåñòâ
43+
static SetSetContainer differenceOfSets(const SetSetContainer& a, SetSetContainer b);
44+
// Ñèììåòðè÷íàÿ ðàçíîñòü ìíîæåñòâ
45+
static SetSetContainer symmetricDifferenceOfSets(const SetSetContainer& a, const SetSetContainer& b);
46+
*/
47+
48+
49+
};
50+
#endif //SET_CONT_SET_KUDASHOV_SETLAB5_KUDASHOV_H
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
#include "SetLab5_Kudashov.h"
2+
3+
int main() {
4+
srand( time(nullptr));
5+
setlocale(LC_ALL, "Russian");
6+
cout << "=================ÄÅÌÎ ËÀÁÛ 4=================" << endl;
7+
SetSetContainer setA = SetSetContainer::creatingSet (rand() % 4 + 6, 5, 500, 5);
8+
cout << "Âûâîä ìíîæåñòâà A: " << endl << setA.printSet(" | ") << endl;
9+
cout << "Ìîùíîñòü ìíîæåñòâà A: " << endl << setA.powerOfTheSet() << endl;
10+
SetSetContainer setB = SetSetContainer::creatingSet (rand() % 4 + 6, 5, 500, 10);
11+
cout << "Âûâîä ìíîæåñòâà B: " << endl << setB.printSet(" | ") << endl;
12+
cout << "Ìîùíîñòü ìíîæåñòâà B: " << endl << setB.powerOfTheSet() << endl;
13+
cout << "----------------Ïîñëå î÷èñòêè----------------" << endl;
14+
setA.deleteSet();
15+
cout << "Âûâîä ìíîæåñòâà A: " << endl << setA.printSet(" | ") << endl;
16+
cout << "Ìîùíîñòü ìíîæåñòâà A: " << endl << setA.powerOfTheSet() << endl;
17+
setB.deleteSet();
18+
cout << "Âûâîä ìíîæåñòâà B: " << endl << setB.printSet(" | ") << endl;
19+
cout << "Ìîùíîñòü ìíîæåñòâà B: " << endl << setB.powerOfTheSet() << endl << endl;
20+
SetSetContainer A = SetSetContainer::creatingSet (rand() % 4 + 6, 5, 200, 10);
21+
SetSetContainer B = SetSetContainer::creatingSet (rand() % 4 + 6, 5, 200, 5);
22+
cout << "Âûâîä ìíîæåñòâà A: " << endl << A.printSet(" | ") << endl;
23+
cout << "Âûâîä ìíîæåñòâà B: " << endl << B.printSet(" | ") << endl;
24+
cout << "ßâëÿåòñÿ ëè A ïîäìíîæåñòâîì B: " << SetSetContainer::isSubset(A, B) << endl;
25+
cout << "Ðàâíû ëè ìíîæåñòâà A è B: " << SetSetContainer::isEqual(A, B) << endl;
26+
SetSetContainer C = SetSetContainer::combiningSets(A, B);
27+
cout << "Âûâîä îáúåäèíåíèÿ ìíîæåñòâ: " << endl << C.printSet(" | ") << endl;
28+
SetSetContainer D = SetSetContainer::intersectionOfSets(A, B);
29+
cout << "Âûâîä ïåðåñå÷åíèÿ ìíîæåñòâ: " << endl << D.printSet(" | ") << endl;
30+
SetSetContainer E = SetSetContainer::differenceOfSets(A, B);
31+
cout << "Âûâîä ðàçíîñòè ìíîæåñòâ A è B: " << endl << E.printSet(" | ") << endl;
32+
SetSetContainer F = SetSetContainer::differenceOfSets(B, A);
33+
cout << "Âûâîä ðàçíîñòè ìíîæåñòâ B è A:" << endl << F.printSet(" | ") << endl;
34+
SetSetContainer G = SetSetContainer::symmetricDifferenceOfSets(A, B);
35+
cout << "Âûâîä ñèììåòðè÷íîé ðàçíîñòè ìíîæåñòâ: " << endl << G.printSet(" | ") << endl;
36+
return 0;
37+
}

0 commit comments

Comments
 (0)