Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.72/88: Рейтинг темы: голосов - 88, средняя оценка - 4.72
0 / 0 / 0
Регистрация: 24.09.2013
Сообщений: 3

Разработать класс "множество целых чисел" в соответствии со следующим заданием

25.09.2013, 19:58. Показов 18230. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Форумчане помогите разобраться с программой, только начался С++

1. Разработать класс "множество целых чисел" в соответствии со следующим заданием
Состояние класса -
Множество состоит из элементов типа int (в множестве не может быть двух элементов с одинаковыми значениями) и определяется мощностью (количеством элементов в множестве) и значениями своих элементов, например: множество из 5 элементов {12, 8, 5,-3, 11} Память под множество выделяется статически во время компиляции, и задается массивом фиксированного предельного значения (например максимальная мощность множества 100 элементов).
Протокол класса -
Определяет возможности создания и инициализации экземпляров класса и правила использования их (методы класса).
Предусмотреть следующие возможности:
• пустой конструктор для инициализации экземпляров и массивов экземпляров класса по умолчанию;
• создание экземпляров класса с инициализацией мощностью множества (начальные значения элементов - натуральные числа);
• создание экземпляров класса с инициализацией мощностью и значениями элементов множества;
• ввод экземпляров класса из входного потока и вывод их значений в выходной поток
(с помощью перегруженных операторов » и «);
• объединение двух множеств (с помощью перегруженного оператора сложения +; результирующее множество должно содержать элементы множества 1 и отличающиеся элементы множества 2);
• добавление нового элемента в множество (с помощью перегруженного оператора +=);
• вычисление пересечения двух множеств (с помощью перегруженного оператора умножения *;
результирующее множество должно состоять из элементов, имеющихся и в множестве 1, и в множестве 2);
• вычисление разности двух множеств ( с помощью перегруженного оператора -; результирующее множество должно состоять из элементов первого множества без тех, которые есть во втором множестве)
• определение, имеется ли некоторый заданный элемент в множестве.
2. Проектирование класса рекомендуется начать с представления состояния класса, учитывающего
заданные операции, а затем реализации конструкторов и перегруженного оператора вывода. Для отладки и исчерпывающего тестирования других методов разработанного класса реализовать диалоговую программу, которая позволяет вводить параметры, отлаживаемых методов. Для обработки ошибочных ситуаций использовать механизм исключительных ситуаций.


3. Повторить разработку класса при условии, что память под множество необходимой длины выделяется динамически, во время выполнения программы (с помощью оператора new; память задастся указателем на int в состоянии класса).
Дополнить интерфейс класса следующими возможностями:
• создание экземпляра класса с его инициализацией другим экземпляром класса (копирующий конструктор);
• переопределение экземпляра класса (с помощью перегруженного оператора присваивания).
4. Написать прикладную программу, использующую разработанный класс.

Добавлено через 22 часа 20 минут
Поможет кто-нибудь ?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
25.09.2013, 19:58
Ответы с готовыми решениями:

Разработать класс "множество целых чисел" в соответствии со следующим заданием
Реализовать класс конечное множество целых чисел, который имеет следующий интерфейс: class Set { int size; // размер множества...

Разработать класс «множество целых чисел заданной мощности»...
Помогите пожалуйста, нужно полное решение данной задачи! Разработать класс, содержащий набор методов (конструктор и методы позволяют...

Разработать класс «Множество (целых чисел, символов, строк и т. д.)» – Set мощности n
Разработать класс «Множество (целых чисел, символов, строк и т. д.)» – Set мощности n. Написать несколько конструкторов, в том числе...

3
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
25.09.2013, 20:00
Цитата Сообщение от novyi1 Посмотреть сообщение
Поможет кто-нибудь ?
Поможем, но делать всё за Вас врядли
0
0 / 0 / 0
Регистрация: 24.09.2013
Сообщений: 3
25.09.2013, 21:01  [ТС]
да мне не все надо, только когда память статически выделяется, говорю же С++ начался вот вот, с классами пока слабо
0
0 / 0 / 0
Регистрация: 24.09.2013
Сообщений: 3
29.09.2013, 21:20  [ТС]
Получилось вот что, проблема с вычитание, народ помогите пожалуйста завтра сдавать
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
 
using namespace std;
 
class Array
{
   int *mas,k;
   void Add(int);
   void Sub(int);
public:
   Array():k(0),mas(new int(0)) {};
   Array(const Array &);
   ~Array() {delete[]mas;};
   void operator+=(int n) {Add(n);};
   void operator+=(Array &);
   void operator-=(int n) {Sub(n);};
   void operator-=(const Array &);
   Array operator*(const Array &)const;
   void operator*=(const Array &);
   friend bool operator==(Array &, Array &);
   friend bool operator<=(Array &, Array &);
   friend ostream& operator<<(ostream &, const Array &);
   friend istream& operator>>(istream &s, Array &);
   int HowMany() {return k;};
};
 
Array::Array(const Array &x):k(x.k)
{
   mas=new int[k];
   for(int i=0;i<k;i++)
      mas[i]=x.mas[i];
}
 
void Array::Add(int n)
{
   int *t,pos;
   for(pos=0;pos<k && mas[pos]<n;pos++) {}
   if (mas[pos]!=n)
   {
      t=new int[++k];
      for(int i=0;i<k-1;i++)
      t[i<pos?i:i+1]=mas[i];
      t[pos]=n;
      delete[]mas;
      mas=t;
   }
}
 
void Array::operator+=(Array &x)
{
   for(int i=0;i<x.k;i++)
      Add(x.mas[i]);
}
 
void Array::Sub(int n)
{
   if (k>0)
   {
      int *t,pos;
      for(pos=0;pos<k && mas[pos]<n;pos++) {}
      if (mas[pos]==n)
      {
         t=new int[--k];
         for(int i=0;i<k+1;i++)
         if (i!=pos) t[i<pos?i:i-1]=mas[i];
         delete[]mas;
         mas=t;
      }
   }
}
 
void Array::operator-=(const Array &x)
{
   for(int i=0;i<x.k;i++)
      return Sub(x.mas[i]);
}
 
Array Array::operator*(const Array &x)const
{
   Array t(*this),t2(*this);
   t-=x;
   for(int i=0;i<t.k;++i)
      t2.Sub(t.mas[i]);
      return t2;
}
 
void Array::operator*=(const Array &x)
{
   Array t(*this);
   t-=x;
   for(int i=0;i<t.k;i++)
      Sub(t.mas[i]);
}
 
bool operator==(Array &x, Array &y)
{
   if (x.k!=y.k) return false;
   for (int i=0;i<x.k;i++)
   if (x.mas[i]!=y.mas[i]) return false;
   return true;
}
 
bool operator<=(Array &x, Array &y)
{
   int s=0;
   for (int i=0;i<x.k;i++)
   while(x.mas[i]!=y.mas[i+s])
   {
      if (x.k+s>y.k) return false;
      s++;
   }
   return true;
}
 
ostream &operator<<(ostream &s, const Array &p)
{ 
   if (p.k!=0){
   s<<"(";
   for (int i=0;i<p.k-1;i++){
      s<<p.mas[i]<<",";
      }
      s<<p.mas[p.k-1];
      }
   return s<<")";
}
istream &operator>>(istream &s, Array &p)
{
  int tmp;
  char c;
  s>>c;
  
  while(c!=')')
  {
    s>>tmp>> c;
    p.Add(tmp);
    }
    return s;
  
  }
 
int main()
{
   Array a,b,c;
   cout<<" Введите множество А: "<<"\n";
   cin>>a;   
   cout<<a<<"\n";
   a-=9;
   cout<<"После вычитания из множества элемента 9: "<<a<<"\n";
   cout<<" Введите множество B: "<<"\n";
   cin>>b;  
   b+=7;
   cout<<"После добавления в множествo элементa 7 : "<<b<<"\n"; 
   cout<<" Пересечение множеств A и В: "<<"\n";
   cout<<a*b<<"\n";
   cout<<"Количество элементов в множестве В: "<<b.HowMany()<<"\n";
   if (a<=b)
      cout<<"А - подмножество В \n";
    else { if (b<=a)  
    cout<<"B - подмножество A \n";}
  cout<<" Объединение множеств А и B: "<<"\n";
     c=a;
     a+=b; 
   cout<<a<<"\n";
   cout<<" Разница множеств А и B: "<<"\n";
   c-=b;
   cout<<c<<"\n";
   return 1;
}
Добавлено через 1 час 38 минут
Вот есть решение задачи точь в точь как моей только она для множества символом, может кто-нибудь переделать под мое условие ?


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
//Set.h
#pragma once
#include <iostream>
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.cpp
#include "StdAfx.h"
#include "Set.h"
 
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];
}
 
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++; //увеличиваем мощность
}
 
bool Set::In (char e) const
{
    for (int i = 0; i<power; i++) //ищем символ в массиве
        if (set[i] == e) return true; //нашли - возвращаем 1
    return false; //не нашли - 0
}
    
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;
}
 
 
 
 
/*int _tmain(int argc, _TCHAR* argv[])
{
    return 0;
}*/
 
//12.cpp
    #include "StdAfx.h"
    #include "Set.h"
    #include <conio.h>
    #include <stdlib.h>
   Set s2;
   Set s3("01234567");
 
 
 
 
char Menu ()
{
    system ("cls");
    cout << "1. Vyvod stand stroki.\n2.Dobavlenie novyh elementov vo mnozhestvo(+=).\n3.Vvod iz vhodnogo potoka - >>.\n4.Slojenie strok.\n5.Vychitanie strok.\n6.Umnojenie strok.\n7.Poisk elementa.\n8.Exit.\n";
    cout << "Enter menu item: ";
    char c;
    cin >> c;
    return c;
}
 
 
 
void f1()
{
    Set s1("01234567");
    cout << "\ns1:\n" << s1;
    cout << "\nPress any key to continue.";
    _getch ();
}
void f2()
{   char k;
    cout << "Vvedite elementy stroki"<<endl;
    for (char i='5'; i<='9'; i++)
    {
    cin >> k;
    s2+=k;
    }
    cout << "\ns1:\n" << s2;
    cout << "\nPress any key to continue.";
    _getch ();
}
void f3()
{
    cout << "\ns1:\n" << s3;
        cout << "\ns2:\n" << s2;
        cout << "\ns1+s2: \n" << s2+s3;
            _getch ();
}
void f4()
{
    cout << "\ns1:\n" << s3;
        cout << "\ns2:\n" << s2;
        cout << "\ns1-s2: \n" << s3-s2;
            _getch ();
}
void f5()
{
    cout << "\ns1:\n" << s3;
        cout << "\ns2:\n" << s2;
        cout << "\ns1*s2: \n" << s3*s2;
            _getch ();
}
void f6()
{   char d;
    cout << "Vvedite element"<<endl;
    cin >> d;
    if (s3.In (d)==true) 
        cout << "Element naiden";
    else
        cout << "Element NE naiden";
        _getch ();
}
 
void f7 ()
{
    cin >> s2; 
    cout << "\ns1:\n" << s2;
    cout << "\nPress any key to continue.";
    _getch ();
}
 
    int _tmain(int argc, _TCHAR* argv[])
    {
    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': f6();
                break;
        case '8': b = false;
                break;
        }
    }
        catch (char* ex) 
        {
            cout << ex;
        }
    }
 
    return 0;
    }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
29.09.2013, 21:20
Помогаю со студенческими работами здесь

Разработать класс, представляющий собой множество целых чисел, с методом определения множества
Выручайте, просто не успеваю помогите мне пожалуйста. Разработать класс, представляющий собой множество целых чисел, с методом...

Разработать класс, предоставляющий собой множество целых чисел, с методом определения множества
Выручайте, просто не успеваю помогите мне пожалуйста с BlueJ Разработать класс, предоставляющий собой множество целых чисел, с методом...

Разработать класс "множество целых чисел из заданного диапазона"
Примечание: Класс должен содержать конструктор по умолчанию, конструктор с параметрами, конструктор копирования, деструктор. Код...

Разработать приложение в соответствии с заданием
Разработать приложение в соответствии с заданием. Организовать ввод массивов как из текстовых файлов, так и с клавиатуры. Для представления...

Разработать приложение в соответствии с заданием
Здравствуйте еще раз уважаемые форумчане! Пишу вам наверное в последний раз, так как нужно помочь в последнем задании! Задание...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru