Класс "множество" и основные операции с ним - 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; }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д