Класс "множество" и основные операции с ним - C#
Формулировка задачи:
Доброго времени суток!
Получил тут задание следующего содержания:
Описать класс «множество», позволяющий выполнять основные операции: добавление и удаление элемента, пересечение, объединение и разность множеств. Написать программу, демонстрирующую все разработанные элементы класса.
Собственно ищу вашей помощи,так как в классах соображаю очень поверхностно .Если есть добрые кодеры подскажите новичку как разобраться с этим заданием,буду очень благодаренРешение задачи: «Класс "множество" и основные операции с ним»
textual
Листинг программы
#include "head.h"
#include <iostream>
#include <conio.h>
#include <string>
#include <stdio.h>
using namespace std;
string rus(char s[ ]);
void menu();
void main()
{setlocale(LC_ALL, "Russian");
cout<<("Добро пожаловать в программу!")<<endl;
menu();
}
string rus(char s[ ])
// перевод кодировки Windows в Dos
{
string t;
int i=0;
t=s;
while (t[i]!=0)
{
if(t[i]>='А'&& t[i]<='п' )
t[i]-=64;
if(t[i]>='р'&& t[i]<='я' )
t[i]-=16;
i++;
}
return t;
}
void menu()
{
char n;
char choose;
int max;
cout<<("Введите максимальный размер множества-");
cin>>max;
set <int> set1(max);
set <int> set2(max);
set <int> set3(max*max);
int x;
do {
cout<<'\n'
<<" ------------Menu------------ "
<<'\n'<<("1. Добавление эл-та в множество")
<<'\n'<<("2. Удаление эл-та из множества")
<<'\n'<<("3. Проверка вхождения эл-та в множество")
<<'\n'<<("4. Присвоение одного множества другому")
<<'\n'<<("5. Пересечение двух множеств")
<<'\n'<<("6. Объединение двух множеств")
<<'\n'<<("7. Разность двух множеств")
<<'\n'<<("8. Вывод множества на экран")
<<'\n'<<("0. Выход")
<<'\n'<<"<";
cin>>n;
system("cls");
switch(n)
{
case '1':cout<<("Выберете множество для добавления(1/2)");
cin>>choose;
cout<<("Введите э-т");
cin>>x;
if(choose=='1')
set1.add(x);
if(choose=='2')
set2.add(x);
break;
case '2':cout<<("Выберете множество для удаления(1/2)");
cin>>choose;
cout<<("Введите величину эл-та");
cin>>x;
if(choose=='1')
set1.del(x);
if(choose=='2')
set2.del(x);
break;
case '3':cout<<("Выберете множество для проверки(1/2)");
cin>>choose;
cout<<("Введите величину эл-та");
cin>>x;
if(choose=='1')
{
if(set1.check_in(x))
cout<<("Элемент содержится в данном множестве");
else
cout<<("Элемент не содержится в данном множестве");
}
if(choose=='2')
{
if(set2.check_in(x))
cout<<("Элемент содержится в данном множестве");
else
cout<<("Элемент не содержится в данном множестве");
}
break;
case '4':cout<<("Выберете в какое множество копировать(1/2)");
cin>>choose;
if(choose=='1')
set1=set2;
if(choose=='2')
set2=set1;
break;
case '5':set3=set1*set2;
cout<<("Результат записан в 3е множество");
break;
case '6':set3=set1&set2;
cout<<("Результат записан в 3е множество");
break;
case '7':cout<<("Выберете вычитаемое(1/2)");
cin>>choose;
if(choose=='1')
set3=set1|set2;
if(choose=='2')
set3=set2|set1;
break;
case '8':cout<<("Выберите множество для вывода(1/2/3)");
cin>>choose;
if(choose=='1')
set1.output();
if(choose=='2')
set2.output();
if(choose=='3')
set3.output();
break;
case '0':return;
default :cout<<("Действие не выбрано");
}
}
while(true);
}
template <class T>
void set<T> ::add(T x)
{
if(size<max_size)
{
if(!check_in(x))
{
a[size]=x;
size+=1;
cout<<("Добавление прошло успешно");
}
else
cout<<("Добавление невозможно");
}
else
cout<<("Добавление невозможно");
}
template <class T>
void set <T>::del(T x)
{
bool ok;
ok=false;
if(size!=0)
{
for(int i=0;i<size;i++)
{
if(a[i]==x)
{
for(int j=i;j<size;j++)
{
a[j]=a[j+1];
}
size-=1;
ok=true;;
}
}
if(ok)
cout<<("Удаление прошло успешно");
}
else
cout<<("Удаление невозможно");
}
template <class T>
bool set <T>::check_in(T x)
{
for(int i=0;i<size;i++)
if(a[i]==x)
return true;
return false;
}
template <class T>
void set<T>::output()
{
if(size==0)
{
cout<<"{}";
return;
}
cout<<"{"<<a[0];
for(int i=1;i<size;i++)
cout<<", "<<a[i];
cout<<"}";
}
template <class T>
set<T> set<T>:: operator* (const set <T> &s2)
{
int k;
k=0;
set <T> s3(max_size);
s3.size=0;
for(int i=0;i<size;i++)
for(int j=0;j<s2.size;j++)
if(s2.a[j]==a[i])
{
s3.a[k]=a[i];
k++;
s3.size+=1;
}
return s3;
}
template <class T>
set<T> set<T>::operator& (const set <T> &s2)
{
bool in;
set <T> s3(size+s2.size);
for(int i=0;i<size;i++)
{
s3.a[i]=a[i];
s3.size+=1;
}
for(int i=0;i<s2.size;i++)
{
in=s3.check_in(s2.a[i]);
if(!in)
{
s3.a[size]=s2.a[i];
s3.size+=1;
}
}
return s3;
}
template <class T>
set<T> set<T>::operator| (set <T> s2)
{
set <T> s3(s2);
for(int i=0;i<size;i++)
for(int j=0;j<s2.size;j++)
if(a[i]==s2.a[j])
for(int k=i;k<s3.size;k++)
{
s3.a[i]=s3.a[i+1];
size-=1;
}
return s3;
}
template <class T>
set<T> set<T>:: operator= (const set <T> &s)
{
if(this==&s)
return *this;
if(max_size!=s.max_size)
{
delete []a;
a=new T[s.max_size];
size=0;
max_size=s.max_size;
}
for(int i=0;i<max_size;i++)
{
a[i]=s.a[i];
}
size=s.size;
return *this;
}
template <class T>
bool operator== (set <T> s1, set <T> s2)
{
bool ok;
ok=false;
for(int i=0;i<s1.size;i++)
{
for(int j=0;j<s2.size;j++)
if(a[i]==a[j])
ok=true;
}
return ok;
}
template <class T>
set<T>:: set(int maxim)
{
a=new T[maxim];
for(int i=0;i<maxim;i++)
a[i]=0;
max_size=maxim;
size=0;
}
template <class T>
set<T>::set(set<T> &x)
{
max_size=x.max_size;
a=new T[max_size];
for(int i=0;i<max_size;i++)
a[i]=x.a[i];
}
template <class T>
set<T>::~set()
{
delete []a;
}