Класс "множество" и основные операции с ним - 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;
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 4.2 из 5
Похожие ответы