Загрузка данных


#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");
}