Загрузка данных
#include "My_lib.h"
#include <iostream>
using namespace std;
// Предусловие: нет.
// Постусловие: создано пустое множество размера 26, все флаги сброшены в false.
My_set::My_set()
{
N = 26;
a = 'a';
M = new bool[N];
for (int i = 0; i < N; i++)
{
M[i] = false;
}
}
// Конструктор копирования
My_set::My_set(const My_set& other)
{
N = other.N;
a = other.a;
M = new bool[N];
for (int i = 0; i < N; i++)
{
M[i] = other.M[i];
}
}
// Деструктор
My_set::~My_set()
{
delete[] M;
}
// Оператор присваивания
My_set& My_set::operator=(const My_set& other)
{
if (this != &other)
{
for (int i = 0; i < N; i++)
{
M[i] = other.M[i];
}
}
return *this;
}
// Предусловие: символ value из диапазона 'a'..'z'.
// Постусловие: соответствующий бит множества установлен в true.
void My_set::insert(char value)
{
if (value >= a && value < a + N)
{
int index = value - a;
M[index] = true;
}
}
// Предусловие: символ value из диапазона 'a'..'z'.
// Постусловие: соответствующий бит множества сброшен в false.
void My_set::remove(char value)
{
if (value >= a && value < a + N)
{
int index = value - a;
M[index] = false;
}
}
// Вывод элементов множества в фигурных скобках
void My_set::print()
{
cout << "{ ";
for (int i = 0; i < N; i++)
{
if (M[i])
{
cout << char(a + i) << " ";
}
}
cout << "}" << endl;
}
// Подсчёт количества единиц в двоичном массиве
int My_set::size()
{
int count = 0;
for (int i = 0; i < N; i++)
{
if (M[i])
{
count++;
}
}
return count;
}
// Проверка наличия символа
bool My_set::find(char value)
{
if (value >= a && value < a + N)
{
return M[value - a];
}
return false;
}
// Проверка равенства двух множеств (A == B)
bool equal(My_set A, My_set B)
{
for (int i = 0; i < A.N; i++)
{
if (A.M[i] != B.M[i])
{
return false;
}
}
return true;
}
// Проверка включения: верно ли, что A является подмножеством B (A <= B)
bool subset(My_set A, My_set B)
{
for (int i = 0; i < A.N; i++)
{
if (A.M[i] && !B.M[i])
{
return false;
}
}
return true;
}
// Объединение множеств (C = A v B)
My_set unification(My_set A, My_set B)
{
My_set C;
for (int i = 0; i < C.N; i++)
{
C.M[i] = A.M[i] || B.M[i];
}
return C;
}
// Пересечение множеств (C = A & B)
My_set intersection(My_set A, My_set B)
{
My_set C;
for (int i = 0; i < C.N; i++)
{
C.M[i] = A.M[i] && B.M[i];
}
return C;
}
// Разность множеств (C = A \ B)
My_set difference(My_set A, My_set B)
{
My_set C;
for (int i = 0; i < C.N; i++)
{
C.M[i] = A.M[i] && !B.M[i];
}
return C;
}
// Дополнение до универсума (НЕ A)
My_set addition(My_set A)
{
My_set C;
for (int i = 0; i < C.N; i++)
{
C.M[i] = !A.M[i];
}
return C;
}
// Симметрическая разность (кольцевая сумма: либо только в A, либо только в B)
My_set symmetric_difference(My_set A, My_set B)
{
My_set C;
for (int i = 0; i < C.N; i++)
{
C.M[i] = (A.M[i] != B.M[i]);
}
return C;
}
#include <iostream>
#include <clocale>
#include "My_lib.h"
using namespace std;
void main()
{
setlocale(LC_ALL, "Russian");
My_set A;
My_set B;
char ch;
// Ввод множества A по методичке
cout << "Вводите элементы множества A через пробелы, в конце Enter:\n";
do
{
cin >> ch;
A.insert(ch);
} while (getchar() != '\n');
// Ввод множества B по методичке
cout << "Вводите элементы множества B через пробелы, в конце Enter:\n";
do
{
cin >> ch;
B.insert(ch);
} while (getchar() != '\n');
cout << "\n--- Исходные множества ---" << endl;
cout << "Множество A: ";
A.print();
cout << "Мощность A: " << A.size() << endl;
cout << "Множество B: ";
B.print();
cout << "Мощность B: " << B.size() << endl;
cout << "\n--- Проверка отношений ---" << endl;
cout << "Равенство A == B: " << (equal(A, B) ? "Да" : "Нет") << endl;
cout << "A является подмножеством B: " << (subset(A, B) ? "Да" : "Нет") << endl;
cout << "\n--- Операции над множествами ---" << endl;
My_set uni = unification(A, B);
cout << "Объединение (A v B): ";
uni.print();
My_set inter = intersection(A, B);
cout << "Пересечение (A & B): ";
inter.print();
My_set diff = difference(A, B);
cout << "Разность (A \\ B): ";
diff.print();
My_set symDiff = symmetric_difference(A, B);
cout << "Симметрическая разность: ";
symDiff.print();
My_set notA = addition(A);
cout << "Дополнение множества A (НЕ A): ";
notA.print();
cout << "\n--- Тест удаления и поиска ---" << endl;
cout << "Поиск буквы 'b' в A: " << (A.find('b') ? "Найдена" : "Не найдена") << endl;
A.remove('b');
cout << "Множество A после remove('b'): ";
A.print();
system("pause");
}