MorganFaust
New member
нужно переделать код в шаблон . шаблоны не изучил еще
C++:
#include <iostream>
class Set
{
private:
unsigned int size;
unsigned int* array;
public:
Set() { size = 0; array = new unsigned int[size]; } // конструктор
Set(int s) {
size = s; array = new unsigned int[size]; // конструктор с аргументами
for (unsigned i = 0; i < size; i++)
array[i] = 0;
}
Set(const Set& ob) // конструктор копии
{
size = ob.size;
array = new unsigned int[size];
for (unsigned int i = 0; i < size; i++)
array[i] = ob.array[i];
}
~Set() { delete[] array; } // деструктор
void Enter(); // ввод
void Show(); // вывод
void Union(Set, Set); // объединение
void intersection(Set, Set); // пересечение
void add(); // добавка элемента
void extract(); // извлечение
void check(); // проверка
void operator = (Set); // перегрузки
int operator [] (int i);
void operator ->();
};
void Set::Enter()
{
std::cout << "Введите размер " << std::endl;
std::cin >> size;
array = new unsigned int[size];
for (unsigned int i = 0; i < size; i++)
{
std::cout << "Введите элемент " << i + 1 << ") ";
std::cin >> array[i];
}
}
void Set::Show()
{
std::cout << "Множество " << std::endl;
for (unsigned int i = 0; i < size; i++)
std::cout << array[i] << " ";
std::cout << std::endl;
}
void Set::Union(Set a, Set b)
{
this->size = a.size + b.size;
this->array = new unsigned int[size];
unsigned i, j, count = 0;
unsigned int n = a.size;
for (i = 0; i < a.size; i++)
array[i] = a.array[i];
for (i = 0; i < b.size; i++)
{
for (j = 0; j < a.size; j++)
if (b.array[i] == a.array[j])
continue;
else
count++;
if (count == a.size)
array[n++] = b.array[i];
count = 0;
}
size = n;
}
void Set::intersection(Set a, Set b)
{
size = a.size + b.size;
array = new unsigned int[size];
unsigned int i, j, n = 0;
for (i = 0; i < a.size; i++)
for (j = 0; j < b.size; j++)
{
if (a.array[i] == b.array[j])
{
array[n++] = a.array[i];
continue;
}
}
size = n;
}
void Set::add()
{
int a[100];
unsigned int i;
int element;
for (i = 0; i < size; i++)
a[i] = array[i];
delete[] array;
size = size + 1;
std::cout << "Введите новый элемент " << std::endl;
std::cin >> element;
a[i] = element;
array = new unsigned int[size];
for (i = 0; i < size; i++)
array[i] = a[i];
}
void Set::extract()
{
unsigned int number, n, i, j;
n = size;
std::cout << "Введите номер элемента от 0 до " << size - 1 << std::endl;
std::cin >> number;
if (number < 0 || number > size)
std::cout << "Ошибка " << std::endl;
else
{
for (i = 0; i < n; i++)
{
if (i == number)
{
for (j = i; j < n - 1; j++)
array[j] = array[j + 1];
n--;
}
}
size--;
}
}
void Set::check()
{
unsigned int element;
std::cout << "Введите элемент для проверки " << std::endl;
std::cin >> element;
unsigned int i, count = 0;
for (i = 0; i < size; i++)
if (array[i] == element)
std::cout << "Да такой элемент найден " << std::endl;
else
count++;
if (count == size)
std::cout << "Элемент не найден " << std::endl;
}
void Set :: operator->()
{
}
void Set::operator = (Set a)
{
unsigned int i;
delete[] this->array;
this->size = a.size;
this->array = new unsigned int[size];
for (i = 0; i < size; i++)
array[i] = a.array[i];
}
int Set::operator[](int i)
{
return array[i];
}
int main()
{
setlocale(0, "rus");
Set a;
std::cout << "Ввод и вывод 1 множества " << std::endl;
a.Enter();
a.Show();
Set b = a;
std::cout << "инициализация множества 2 с помощью конструктора копии " << std::endl;
b.Show();
std::cout << "Ввод множества 2 " << std::endl;
b.Enter();
Set c;
std::cout << "Объединение множеств " << std::endl;
c.Union(a, b);
c.Show();
Set d;
d.intersection(a, b);
std::cout << "Пересечение множеств" << std::endl;
d.Show();
std::cout << "Добавка элемента " << std::endl;
d.add();
d.Show();
std::cout << "Проверка " << std::endl;
d.check();
d.Show();
std::cout << "Извлечение " << std::endl;
d.extract();
d.Show();
}