Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 22, средняя оценка - 4.86
novyi1
0 / 0 / 0
Регистрация: 24.09.2013
Сообщений: 3
25.09.2013, 19:58     Разработать класс "множество целых чисел" в соответствии со следующим заданием #1
Форумчане помогите разобраться с программой, только начался С++

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


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

Добавлено через 22 часа 20 минут
Поможет кто-нибудь ?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.09.2013, 19:58     Разработать класс "множество целых чисел" в соответствии со следующим заданием
Посмотрите здесь:

Перегрузка операторов для класса "множество целых чисел" C++
C++ Ввести класс для работы с объектом "множество целых чисел"
Разработать класс, представляющий собой множество целых чисел, с методом определения множества C++
C++ Разработать класс "Массив больших чисел", который состоит из объектов класса "Большие целые числа". Найти сумму элементов массива.
C++ Создать класс "Последовательность целых чисел"
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11825 / 6804 / 769
Регистрация: 27.09.2012
Сообщений: 16,873
Записей в блоге: 2
Завершенные тесты: 1
25.09.2013, 20:00     Разработать класс "множество целых чисел" в соответствии со следующим заданием #2
Цитата Сообщение от novyi1 Посмотреть сообщение
Поможет кто-нибудь ?
Поможем, но делать всё за Вас врядли
novyi1
0 / 0 / 0
Регистрация: 24.09.2013
Сообщений: 3
25.09.2013, 21:01  [ТС]     Разработать класс "множество целых чисел" в соответствии со следующим заданием #3
да мне не все надо, только когда память статически выделяется, говорю же С++ начался вот вот, с классами пока слабо
novyi1
0 / 0 / 0
Регистрация: 24.09.2013
Сообщений: 3
29.09.2013, 21:20  [ТС]     Разработать класс "множество целых чисел" в соответствии со следующим заданием #4
Получилось вот что, проблема с вычитание, народ помогите пожалуйста завтра сдавать
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;
    }
Yandex
Объявления
29.09.2013, 21:20     Разработать класс "множество целых чисел" в соответствии со следующим заданием
Ответ Создать тему
Опции темы

Текущее время: 18:09. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru