-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathbasic.cpp
More file actions
157 lines (119 loc) · 6.35 KB
/
basic.cpp
File metadata and controls
157 lines (119 loc) · 6.35 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
/* РЕАЛІЗАЦІЯ ФУНКЦІЙ ІЗ ЗАГОЛОВНОГО
ФАЙЛУ. ОСНОВНА ФУНКЦІОНАЛЬНІСТЬ ПРОГРАМИ */
#include "basic.h"
// функція для розбиття текстового рядку на масив символів(в нашому випадку - цифр)
void splitThings(const QString &string1, const QString &string2, QStringList &text1, QStringList &text2)
{
text1 = string1.split(" "); // власне розбиття тектового рядка
text2 = string2.split(" ");
}
// функція для сортування. повертає true, якщо необхідно поміняти
// значення місцями, в іншому випадку - false.
// Аналог Disposition
bool sortingAlg(QString str1, QString str2)
{
// приведення рядку символів до типу int і порівняння
if (str1.toInt() < str2.toInt())
return true;
return false;
}
// Функція для виконання операції об'єднання множин.
QString Union(QStringList list1, QStringList list2)
{
QString result = ""; // оголошення порожнього текстового рядка
list1 << list2; // злиття двох масивів, які містять цифри
list1.removeDuplicates(); // видалення дублікатів, за допомогою функції наявної в QT
std::sort(list1.begin(),list1.end(), sortingAlg); // сортування на зростання
// надання змінній значення другого масиву, при цьому, після кожного значення проставляється " "
result = list1.join(" ");
return result; // повернення результату
}
// функція для знаходження різниці двох множин (A/B)
QString DifferenceAB(QStringList list1, QStringList list2)
{
// цикл, для перегляду кожного елемента list2(множина A або B)
for (int i = 0; i < list2.length();i++)
{
// якщо в list1 є поточний елемент з list2
if (list1.indexOf(list2[i]) != -1)
{
// видалення цього елемента
// ПРИГАДАЙ ОПЕРАЦІЮ A/B !!!
list1.removeAt(list1.indexOf(list2[i]));
}
}
// повернення значення першого масиву, при цьому, після кожного значення проставляється " "
// і устворюється не масив, а текствоий рядок
return list1.join(" ");
}
// ПЕРЕТИН
QString Intersection(QStringList list1, QStringList list2)
{
// перегляд кожного елемента з list1(множина А)
for (int i = 0; i < list1.length();i++)
{
// якщо в множині B немає елемента з множини A
if (list2.indexOf(list1[i]) == -1)
{
// видалення елемента з множини A
list1.removeAt(i);
// в множині А на 1 менше елемент, отже відбувся зсув
// Отже, наприклад, якщо ми перевіряємо індекс 2 і видаляємо його
// то елемент з індексом 3 матиме індекс (2).
// аби його перевірити в наступній ітерації циклу,
// зменшуємо значення змінної i на один.
// після цього він збільшиться на один, а, отже, індекс не зміниться
// і ми не пропустимо жодного елемента
i--;
}
}
if(list1.empty()){
list1+="∅";
}
// повернення значення першого масиву, при цьому, після кожного значення проставляється " "
// і устворюється не масив, а текствоий рядок
return list1.join(" ");
}
// СИМЕТРИЧНА РІЗНИЦЯ
QString SymmetricDifference(QStringList list1, QStringList list2)
{
// передивляємося кожен елемент
for (int i = 0; i < list1.length();i++)
{
// якщо в множині B немає поточного елемента множини А
if (list2.indexOf(list1[i]) != -1)
{
// видаляємо цей елемент з множини В
list2.removeAt(list2.indexOf(list1[i]));
// видаляємо цей елемент з множини А
list1.removeAt(i);
// в множині А на 1 менше елемент, отже відбувся зсув
// Отже, наприклад, якщо ми перевіряємо індекс 2 і видаляємо його
// то елемент з індексом 3 матиме індекс (2).
// аби його перевірити в наступній ітерації циклу,
// зменшуємо значення змінної i на один.
// після цього він збільшиться на один, а, отже, індекс не зміниться
// і ми не пропустимо жодного елемента
i--;
}
}
list1 << list2; // злиття двох масивів, які містять цифри
std::sort(list1.begin(),list1.end(), sortingAlg); // сортування на зростання
// повернення значення першого масиву, при цьому, після кожного значення проставляється " "
// і устворюється не масив, а текствоий рядок
return list1.join(" ");
}
bool AintoB(QStringList list1, QStringList list2)
{
short counter = 0;
for (short i = 0; i < list1.length();i++)
{
if (list2.indexOf(list1[i]) != -1)
{
counter++;continue;
} else
return false;
}
if (counter == list1.length())
return true;
}