Advertisement
Guest User

Untitled

a guest
Nov 20th, 2017
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.34 KB | None | 0 0
  1. #include "stdafx.h"
  2. #include <cstdlib>
  3. #include <iostream>
  4. #include <conio.h>
  5.  
  6. using namespace std;
  7.  
  8. class Set{
  9. static const int max_power = 100;
  10. char set [max_power];
  11. int power;
  12. public:
  13. Set(): power(0){};
  14. Set(const Set& s); //конструктор копирования
  15. Set(int p); //создание экземпляров класса с инициализацией мощностью множества (начальное множество - символы, начиная с символа пробел);
  16. Set(const char* str);//создание экземпляров класса с инициализацией значениями элементов множества как строки символов;
  17. ~Set(){};
  18.  
  19. Set& operator = (const Set& s);
  20. Set& operator += (const char e);//добавление нового элемента в множество (с помощью перегруженного оператора += );
  21. bool In(char e) const;
  22.  
  23. friend Set operator - (const Set &p1, const Set &p2); //• вычисление разности двух множеств (с помощью перегруженного оператора вычитания -; результирующее множество должно состоять из элементов первого множества без тех, которые есть во втором множестве);
  24. friend Set operator * (const Set &p1, const Set &p2); //• вычисление пересечения двух множеств (с помощью перегруженного оператора умножения *; результирующее множество должно состоять из элементов, имеющихся и в множестве 1, и в множестве 2);
  25. friend Set operator + (const Set &p1, const Set &p2); //• объединение двух множеств (с помощью перегруженного оператора сложения +; результирующее множество должно содержать элементы множества 1 и отличающиеся элементы множества 2);
  26. friend istream & operator >> ( istream & in, Set & p ); // ввод экземпляров класса из входного потока
  27. friend ostream & operator << ( ostream & out, const Set & p );
  28. };
  29.  
  30. Set::Set(const Set& s){
  31. power = s.power;
  32. memcpy (set, s.set, sizeof(char)*power);
  33. }
  34.  
  35. Set::Set(int p){
  36. if (p > max_power){
  37. power = 0;
  38. return;
  39. }
  40. power = p;
  41. for (int i=0;i<p;i++) set[i] =' '+i;
  42. }
  43.  
  44. Set::Set (const char* str){
  45. power = 0; //обнуляем мощность
  46. int len = strlen (str); //получаем длину строки
  47. if (len > max_power) return; //если она больше максимальной - выходим
  48. for (int i = 0; i<len; i++) *this += str[i];
  49. }
  50.  
  51. bool Set::In (char e) const{
  52. for (int i = 0; i<power; i++) //ищем символ в массиве
  53. if (set[i] == e) return true; //нашли - возвращаем 1
  54. return false; //не нашли - 0
  55. }
  56.  
  57. Set& Set::operator = (const Set& s){ //аналогично конструктору копирования
  58. power = s.power;
  59. memcpy(set, s.set, sizeof(char)*power);
  60. return *this;
  61. }
  62.  
  63. Set& Set::operator += (const char e)//Добавление новых элемнтов во множество
  64. {
  65. if (power+1>max_power || In(e)) return *this; //если максимальная мощность достигнута или такой элемент уже есть - выходим
  66. set[power] = e; //Добавляем в конец
  67. power++; //увеличиваем мощность
  68. }
  69.  
  70. Set operator - (const Set &p1, const Set &p2){
  71. Set tmp; //буфер
  72. for (int i = 0; i<p1.power; i++) //идём по символам первого множества
  73. if (!p2.In(p1.set[i])) tmp+=p1.set[i]; //если символ первого не содержится во втором, добавляем к результату
  74. return tmp; //возвращаем буфер
  75. }
  76.  
  77. Set operator * (const Set &p1, const Set &p2){
  78. Set tmp;
  79. for (int i = 0; i<p1.power; i++) //если символ первого содержится во втором, добавляем к результату
  80. if (p2.In(p1.set[i])) tmp+=p1.set[i];
  81. return tmp;
  82. }
  83.  
  84. Set operator + (const Set &p1, const Set &p2){
  85. Set tmp;
  86. for (int i = 0; i<p1.power; i++) //просто добавляем к результату все символы первого и второго множеств
  87. tmp+=p1.set[i]; //повторные не добавятся из-за реализации оператора +=
  88. for (int i = 0; i<p2.power; i++)
  89. tmp+=p2.set[i];
  90. return tmp;
  91. }
  92.  
  93. istream & operator >> ( istream & in, Set & p ){
  94. cout << "Enter power: ";
  95. in >> p.power;
  96. cout << "Enter chars: ";
  97. for (int i=0; i<p.power; i++)
  98. in >> p.set[i];
  99. return in;
  100. }
  101.  
  102. ostream & operator << ( ostream & out, const Set & p ){
  103. out << "{ ";
  104. for (int i = 0; i<p.power-1; i++) out << p.set[i] << ", ";
  105. out << p.set[p.power-1] << " }";
  106. return out;
  107. }
  108.  
  109. Set s;
  110. Set s2;
  111. Set s3("01234567");
  112.  
  113. char Menu (){
  114. system ("cls");
  115. cout << "1. Вывод стандартной строки.\n2. Добавление элементов в множество.\n3. Копирование.\n4. Сложение.\n5. Вычитание.\n6. Умножение.\n7. Выход.\n";
  116. cout << "Введите пункт меню: ";
  117. char c;
  118. cin >> c;
  119. return c;
  120. }
  121.  
  122. void f1(){
  123. Set s1("01234567");
  124. cout << "\ns1:\n" << s1;
  125. cout << "\nНажмите клавишу для продолжения";
  126. _getch();
  127. s=s1;
  128. }
  129. void f2(){
  130. char k;
  131. cout << "Введите элементы строки"<<endl;
  132. for (char i='5'; i<='9'; i++){
  133. cin >> k;
  134. s2+=k;
  135. }
  136. cout << "\ns1:\n" << s2;
  137. cout << "\nНажмите клавишу для продолжения";
  138. _getch();
  139. s=s2;
  140. }
  141. void f3(){
  142. cout << "\ns1:\n" << s3;
  143. cout << "\ns2:\n" << s2;
  144. cout << "\ns1+s2: \n" << s2+s3;
  145. s=s2+s3;
  146. _getch ();
  147. }
  148. void f4(){
  149. cout << "\ns1:\n" << s3;
  150. cout << "\ns2:\n" << s2;
  151. cout << "\ns1-s2: \n" << s3-s2;
  152. s=s3-s2;
  153. _getch ();
  154. }
  155. void f5(){
  156. cout << "\ns:\n" << s;
  157. cout << "\ns2:\n" << s2;
  158. cout << "\ns1*s2: \n" << s3*s2;
  159. _getch ();
  160. }
  161. void f7 (){
  162. cout << "\ns:" << s;
  163. cout << "\nНажмите клавишу для продолжения";
  164. _getch();
  165. }
  166.  
  167. void main(){
  168. setlocale(LC_ALL,"Russian");
  169. bool b = true;
  170. while (b){
  171. try{
  172. char c = Menu ();
  173. switch (c) {
  174. case '1': f1();break;
  175. case '2': f2();break;
  176. case '3': f7();break;
  177. case '4': f3();break;
  178. case '5': f4();break;
  179. case '6': f5();break;
  180. case '7': b = false;break;
  181. }
  182. }
  183. catch (char* ex) {cout << ex;}
  184. }
  185. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement