Код программы
Main.cpp //10 вар
/*
Строчные латинские буквы
Множество, содержащее буквы, имеющиеся в любом из множеств A или B, но отсутсвующие в C, кроме того, обязательно встречающиеся
также и в D
((A + B) - C) * D
*/
#include <iostream>
#include <clocale>
#include <stdlib.h>
#include <stdio.h>
#include <Windows.h>
#include <ctime>
#include <conio.h>
#include "set.h"
using namespace std;
int main()
{
setlocale(LC_CTYPE, "rus");
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
const int sizeb = 26;
std::system("CLS");
char ch;
char U[] = { 'a','b','c','d','e','f','g','h','i','g','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z' };
//bitset<sizeb> A;
Set A;
Set B;
Set C;
Set D;
Set E;
Set F;
Set G;
std::system("CLS");
int c = 0;
#pragma region A
std::cout << "Введите количество элементов множества A" << endl;
std::cin >> c;
for (int i = 0; i < c; i++)
{
std::cout << "Введите элемент № " << i + 1 << " множества A строчной буквой латинского алфавита" << endl;
fflush(stdin);
ch = _getch();
if (!((int)ch >= (int)'a' && (int)ch <= (int)'z'))
{
std::cout << "!!!Строка содержит цифру или другой неподходящий символ!!!\n";
i--;
}
else
A.AddElement(ch);
}
std::cout << "Вы ввели множество А: " << endl; //Вывод множества на экран
A.ShowSet();
std::cout << "отображение на универсум А: " << endl; //Вывод множества на экран
A.ShowUniversum();
std::cout << endl;
#pragma endregion A
#pragma region B
std::cout << "Введите количество элементов множества B" << endl;
std::cin >> c;
for (int i = 0; i < c; i++)
{
std::cout << "Введите элемент № " << i + 1 << " множества B строчной буквой латинского алфавита" << endl;
fflush(stdin);
ch = _getch();
if (!((int)ch >= (int)'a' && (int)ch <= (int)'z'))
{
std::cout << "!!!Строка содержит цифру или другой неподходящий символ!!!\n";
i--;
}
else
B.AddElement(ch);
}
std::cout << "Вы ввели множество B: " << endl; //Вывод множества на экран
B.ShowSet();
std::cout << "отображение на универсум B: " << endl; //Вывод множества на экран
B.ShowUniversum();
std::cout << endl;
#pragma endregion B
#pragma region C
std::cout << "Введите количество элементов множества C" << endl;
std::cin >> c;
for (int i = 0; i < c; i++)
{
std::cout << "Введите элемент № " << i + 1 << " множества C строчной буквой латинского алфавита" << endl;
fflush(stdin);
ch = _getch();
if (!((int)ch >= (int)'a' && (int)ch <= (int)'z'))
{
std::cout << "!!!Строка содержит цифру или другой неподходящий символ!!!\n";
i--;
}
else
C.AddElement(ch);
}
std::cout << "Вы ввели множество C: " << endl; //Вывод множества на экран
C.ShowSet();
std::cout << "отображение на универсум C: " << endl; //Вывод множества на экран
C.ShowUniversum();
std::cout << endl;
#pragma endregion C
#pragma region D
std::cout << "Введите количество элементов множества D" << endl;
std::cin >> c;
for (int i = 0; i < c; i++)
{
std::cout << "Введите элемент № " << i + 1 << " множества D строчной буквой латинского алфавита" << endl;
fflush(stdin);
ch = _getch();
if (!((int)ch >= (int)'a' && (int)ch <= (int)'z'))
{
std::cout << "!!!Строка содержит цифру или другой неподходящий символ!!!\n";
i--;
}
else
D.AddElement(ch);
}
std::cout << "Вы ввели множество D: " << endl; //Вывод множества на экран
D.ShowSet();
std::cout << "отображение на универсум D: " << endl; //Вывод множества на экран
D.ShowUniversum();
std::cout << endl;
#pragma endregion D
clock_t timeCheck = clock();
E = A | B;
F = E / C;
G = F & D;
timeCheck = clock() - timeCheck;
std::cout << "Обработка ((A + B) - C) * D с использованием отображения на Универсум заняла " << timeCheck / (double)CLOCKS_PER_SEC << "сек" << endl;
std::cout << "Отображение E = A | B: " << endl; //Вывод множества на экран
E.ShowSet();
std::cout << "Отображение на универсум E: " << endl; //Вывод множества на экран
E.ShowUniversum();
std::cout << endl;
std::cout << "Отображение F = E / C: " << endl; //Вывод множества на экран
E.ShowSet();
std::cout << endl;
std::cout << "Отображение на универсум F: " << endl; //Вывод множества на экран
E.ShowUniversum();
std::cout << endl;
std::cout << "Отображение G = F & D: " << endl; //Вывод множества на экран
G.ShowSet();
std::cout << endl;
std::cout << "Отображение на универсум G: " << endl; //Вывод множества на экран
G.ShowUniversum();
std::cout << endl;
system("pause");
return 0;
} set.h
#pragma once
#include <iostream>
const char U[] = { 'a','b','c','d','e','f','g','h','i','g','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z' };
const int sizeb = 26;
class Set
{
public:
Set();
Set(const Set &other);
Set& operator=(const Set& other);
friend Set operator|(const Set& A, const Set& B);
friend Set operator&(const Set& A, const Set& B);
friend Set operator/(const Set& A, const Set& B);
friend Set operator~(const Set& A);
void AddElement(char element);
void ClearList();
void ShowSet();
void ShowUniversum();
protected:
private:
long int data;
};
Set::Set()
{
data = 0;
}
Set::Set(const Set & other)
{
this->data = other.data;
}
Set& Set::operator=(const Set& other)
{
this->data = other.data;
return *this;
}
void Set::AddElement(char element)
{
this->data |= 1 << ((int)element - (int)'a');
}
void Set::ClearList()
{
this->data = 0;
}
Set operator|(const Set& A, const Set& B)
{
Set C = Set(A);
C.data |= B.data;
return C;
}
Set operator&(const Set& A, const Set& B)
{
Set C = Set(A);
C.data &= B.data;
return C;
}
Set operator/(const Set& A, const Set& B)
{
Set C = Set(A);
C.data &= ~B.data;
return C;
}
Set operator~(const Set& A)
{
Set C = Set(A);
C.data &= ~A.data;
return C;
}
void Set::ShowSet()
{
for (int i = 0; i < sizeb; i++)
if ((this->data >> i) & 1 == 1) std::cout << U[i];
std::cout << std::endl;
}
void Set::ShowUniversum()
{
for (int i = 0; i <= sizeb; i++)
std::cout << ((this->data >> i) & 1);
std::cout << std::endl;
}