Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "stdafx.h"
- #include <cstdlib>
- #include <iostream>
- #include <conio.h>
- using namespace std;
- class Set{
- static const int max_power = 100;
- char set [max_power];
- int power;
- public:
- Set(): power(0){};
- Set(const Set& s); //конструктор копирования
- Set(int p); //создание экземпляров класса с инициализацией мощностью множества (начальное множество - символы, начиная с символа пробел);
- Set(const char* str);//создание экземпляров класса с инициализацией значениями элементов множества как строки символов;
- ~Set(){};
- Set& operator = (const Set& s);
- Set& operator += (const char e);//добавление нового элемента в множество (с помощью перегруженного оператора += );
- bool In(char e) const;
- friend Set operator - (const Set &p1, const Set &p2); //• вычисление разности двух множеств (с помощью перегруженного оператора вычитания -; результирующее множество должно состоять из элементов первого множества без тех, которые есть во втором множестве);
- friend Set operator * (const Set &p1, const Set &p2); //• вычисление пересечения двух множеств (с помощью перегруженного оператора умножения *; результирующее множество должно состоять из элементов, имеющихся и в множестве 1, и в множестве 2);
- friend Set operator + (const Set &p1, const Set &p2); //• объединение двух множеств (с помощью перегруженного оператора сложения +; результирующее множество должно содержать элементы множества 1 и отличающиеся элементы множества 2);
- friend istream & operator >> ( istream & in, Set & p ); // ввод экземпляров класса из входного потока
- friend ostream & operator << ( ostream & out, const Set & p );
- };
- Set::Set(const Set& s){
- power = s.power;
- memcpy (set, s.set, sizeof(char)*power);
- }
- Set::Set(int p){
- if (p > max_power){
- power = 0;
- return;
- }
- power = p;
- for (int i=0;i<p;i++) set[i] =' '+i;
- }
- Set::Set (const char* str){
- power = 0; //обнуляем мощность
- int len = strlen (str); //получаем длину строки
- if (len > max_power) return; //если она больше максимальной - выходим
- for (int i = 0; i<len; i++) *this += str[i];
- }
- bool Set::In (char e) const{
- for (int i = 0; i<power; i++) //ищем символ в массиве
- if (set[i] == e) return true; //нашли - возвращаем 1
- return false; //не нашли - 0
- }
- Set& Set::operator = (const Set& s){ //аналогично конструктору копирования
- power = s.power;
- memcpy(set, s.set, sizeof(char)*power);
- return *this;
- }
- Set& Set::operator += (const char e)//Добавление новых элемнтов во множество
- {
- if (power+1>max_power || In(e)) return *this; //если максимальная мощность достигнута или такой элемент уже есть - выходим
- set[power] = e; //Добавляем в конец
- power++; //увеличиваем мощность
- }
- Set operator - (const Set &p1, const Set &p2){
- Set tmp; //буфер
- for (int i = 0; i<p1.power; i++) //идём по символам первого множества
- if (!p2.In(p1.set[i])) tmp+=p1.set[i]; //если символ первого не содержится во втором, добавляем к результату
- return tmp; //возвращаем буфер
- }
- Set operator * (const Set &p1, const Set &p2){
- Set tmp;
- for (int i = 0; i<p1.power; i++) //если символ первого содержится во втором, добавляем к результату
- if (p2.In(p1.set[i])) tmp+=p1.set[i];
- return tmp;
- }
- Set operator + (const Set &p1, const Set &p2){
- Set tmp;
- for (int i = 0; i<p1.power; i++) //просто добавляем к результату все символы первого и второго множеств
- tmp+=p1.set[i]; //повторные не добавятся из-за реализации оператора +=
- for (int i = 0; i<p2.power; i++)
- tmp+=p2.set[i];
- return tmp;
- }
- istream & operator >> ( istream & in, Set & p ){
- cout << "Enter power: ";
- in >> p.power;
- cout << "Enter chars: ";
- for (int i=0; i<p.power; i++)
- in >> p.set[i];
- return in;
- }
- ostream & operator << ( ostream & out, const Set & p ){
- out << "{ ";
- for (int i = 0; i<p.power-1; i++) out << p.set[i] << ", ";
- out << p.set[p.power-1] << " }";
- return out;
- }
- Set s;
- Set s2;
- Set s3("01234567");
- char Menu (){
- system ("cls");
- cout << "1. Вывод стандартной строки.\n2. Добавление элементов в множество.\n3. Копирование.\n4. Сложение.\n5. Вычитание.\n6. Умножение.\n7. Выход.\n";
- cout << "Введите пункт меню: ";
- char c;
- cin >> c;
- return c;
- }
- void f1(){
- Set s1("01234567");
- cout << "\ns1:\n" << s1;
- cout << "\nНажмите клавишу для продолжения";
- _getch();
- s=s1;
- }
- void f2(){
- char k;
- cout << "Введите элементы строки"<<endl;
- for (char i='5'; i<='9'; i++){
- cin >> k;
- s2+=k;
- }
- cout << "\ns1:\n" << s2;
- cout << "\nНажмите клавишу для продолжения";
- _getch();
- s=s2;
- }
- void f3(){
- cout << "\ns1:\n" << s3;
- cout << "\ns2:\n" << s2;
- cout << "\ns1+s2: \n" << s2+s3;
- s=s2+s3;
- _getch ();
- }
- void f4(){
- cout << "\ns1:\n" << s3;
- cout << "\ns2:\n" << s2;
- cout << "\ns1-s2: \n" << s3-s2;
- s=s3-s2;
- _getch ();
- }
- void f5(){
- cout << "\ns:\n" << s;
- cout << "\ns2:\n" << s2;
- cout << "\ns1*s2: \n" << s3*s2;
- _getch ();
- }
- void f7 (){
- cout << "\ns:" << s;
- cout << "\nНажмите клавишу для продолжения";
- _getch();
- }
- void main(){
- setlocale(LC_ALL,"Russian");
- bool b = true;
- while (b){
- try{
- char c = Menu ();
- switch (c) {
- case '1': f1();break;
- case '2': f2();break;
- case '3': f7();break;
- case '4': f3();break;
- case '5': f4();break;
- case '6': f5();break;
- case '7': b = false;break;
- }
- }
- catch (char* ex) {cout << ex;}
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement