1 / 1 / 0
Регистрация: 06.09.2014
Сообщений: 38
1

Описать класс "множество"

09.09.2014, 18:47. Показов 8151. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Описать класс «множество», позволяющий выполнять основные операции — добавление
и удаление элемента, пересечение, объединение и разность множеств.

Все написала, добавление, удаление элемента и вывод множества работает, выборка в какое множество записывать и из какого удалять тоже. Но как только вызывается 4,5,6 пункты меню программа выдает странную ошибку

Debug Assertion Failed!
Line 52
Ставлю на эту линию разные методы - все тоже самое
Буду ОЧЕНЬ благодарна, кто объяснит, в чем дело.

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
#include "stdafx.h"
#include <iostream>
using namespace std;
 
class mnog{
private:
    double *m; 
    int msize, size; 
public:
    mnog(int ms){ //Конструктор предназначен для инициализации объекта и вызывается автоматически при его создании
        this -> msize = ms;
        m = new double [ms];
        size = 0;
    }
 
    ~mnog(){ //деструктор
        delete [] this -> m;
    }
 
    void cinMn(){ //введение элемента в множество
        if (this -> size < this -> msize){
            cout << "Enter the element ";
            cin >> m[this -> size];
            this -> size++;
            cout << "Element is written" << endl;
        }
        else{
            cout << "Set is full" << endl;
        }
    }
 
    void coutMn(){ //выведение множества
        for (int i = 0; i < this-> size; i++){
            cout << m[i] << " ";
        }
        cout << endl << "Set is derived" << endl;
    }
 
    void deletMn(){
        int a = 0;
        while (a > size || a < 1){
            cout << "What element of the set you want to delete?";
            cin >> a;
        }
        for (int i = a; i < size; i++){
            m[a] = m[a+1];
        }
        m[size] = NULL;
        size--;
        cout << "Element deleted";
    }
 
    mnog operator+(const mnog &R){ //(ссылка на объект правого операнда, R - правый операнд,
        int k = size + R.size;
        int r = 0;
        mnog mnogestvo3(k); //объект, которому мы присвоим результат
        for (int i = 0; i < size; i++){
            mnogestvo3.m[i] = m[r];
            r++;
        }
        for (int i = size; i < k; i++){ 
            mnogestvo3.m[i] = R.m[i];
            r++;
        }
        mnogestvo3.size = r;
        return mnogestvo3;
    }
    
    mnog operator*(const mnog &R){//пересечение
        int k = size + R.size;
        int r = 0;
        bool b = true;
        mnog mnogestvo3(k); //объект, которому мы присвоим результат
        for (int i = 0; i < size; i++){
            for (int j = 0; j < R.size && b; j++){
                if (m[i] = R.m[i]){
                    mnogestvo3.m[r] = m[i];
                    r++;
                    b = false;
                }
            }
        }
        mnogestvo3.size = r;
        return mnogestvo3;
    }
 
    mnog operator-(const mnog &R){//вычитание
        int k = size + R.size;
        int r = 0;
        mnog mnogestvo3(k); //объект, которому мы присвоим результат
        for (int i = 0; i < size; i++){
            for (int j = 0; j < R.size; i++){
                if (m[i] != R.m[i]){
                    mnogestvo3.m[r] = m[i];
                    r++;
                }
            }
        }
        for (int i = 0; i < R.size; i++){
            for (int j = 0; j < size; i++){
                if (m[i] != R.m[i]){
                    mnogestvo3.m[r] = m[i];
                    r++;
                }
            }
        }
        mnogestvo3.size = r;
        return mnogestvo3;
    }
};
 
int main ( ){
    int max1 = 0, max2 = 0, size = 0, t = 0, fir = 0, sec = 0, ot = 0;
    bool k = true;
    cout << "Enter the max size of first set ";
    cin >> max1;
    cout << "Enter the max size of second set ";
    cin >> max2;
    mnog mnogestvo1(max1);//создаем объект класса mnog с названием mnogestvo
    mnog mnogestvo2(max2);//создаем 2й объект класса mnog с названием mnogestvo
    mnog mnogestvo3(max1+max2); //3й объект
    while (k){
        cout << "Menu" << endl;
        cout << "1: cin" << endl;
        cout << "2: cout" << endl;
        cout << "3: delete" << endl;
        cout << "4: +" << endl;
        cout << "5: * intersection" << endl;
        cout << "6: -" << endl;
        cout << "7: Exit" << endl;
        cout << "Enter the number" << endl;
        cin >> ot;
        system("cls");
        switch (ot){
            case 1:
                t = 0;
                while (t < 1 || t > 2){
                    cout << "What the set will work? 1 or 2?";
                    cin >> t;
                }
                if (t == 1){
                    mnogestvo1.cinMn();
                    fir++;
                }
                else{
                    mnogestvo2.cinMn();
                    sec++;
                }
                break;
            case 2:
                t = 0;
                if (fir !=0 || sec !=0){
                    while (t < 1 || t > 2){
                        cout << "What the set will work? 1 or 2?";
                        cin >> t;
                    }
                    if (t == 1){
                        if (fir > 0){
                            mnogestvo1.coutMn();
                        }
                        else cout << "The set1 is NULL";
                    }
                    else{
                        if (sec > 0){
                            mnogestvo2.coutMn();
                        }
                        else cout << "The set2 is NULL";
                    }
                }
                break;
            case 3:
                t = 0;
                if (fir !=0 || sec !=0){
                    while (t < 1 || t > 2){
                        cout << "What the set will work? 1 or 2?";
                        cin >> t;
                    }
                    if (t == 1){
                        if (fir > 0){
                            mnogestvo1.deletMn();
                            fir--;
                        }
                        else cout << "The set1 is NULL";
                    }
                    else{
                        if (sec > 0){
                            mnogestvo2.deletMn();
                            sec--;
                        }
                        else cout << "The set2 is NULL";
                    }
                }
                break;
            case 4:
                if (fir !=0 && sec !=0){
                    mnogestvo3 = mnogestvo1 + mnogestvo2;
                    mnogestvo3.coutMn();
                }
                else{
                    cout << "The set is NULL";
                }
                break;
            case 5:
                if (fir !=0 && sec !=0){
                    mnogestvo3 = mnogestvo1 * mnogestvo2;
                    mnogestvo3.coutMn();
                }
                else{
                    cout << "The set is NULL";
                }
                break;
            case 6:
                if (fir !=0 && sec !=0){
                    mnogestvo3 = mnogestvo1 - mnogestvo2;
                    mnogestvo3.coutMn();
                }
                else{
                    cout << "The set is NULL";
                }
                break;
            case 7: k = false;
                break;
        }
    }
    system ("pause");
    return 0;
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.09.2014, 18:47
Ответы с готовыми решениями:

Описать класс “множество”
Описать класс “множество”, позволяющий выполнять основные операции — добавление и удаление...

Описать класс множество
Описать класс множество с полями элементы множества и количество элементов, позволяющий добавлять и...

Нужно описать класс «множество»
Привет всем. Недавно начал изучать классы и решаю одну задачу. Нужно описать класс «множество»,...

Описать класс «множество», позволяющий добавлять и удалять элементы
Всем доброго времени суток, нужна небольшая помощь, void set(int fir, int sec, int thir,int...

8
Модератор
Эксперт С++
13496 / 10751 / 6406
Регистрация: 18.12.2011
Сообщений: 28,688
09.09.2014, 19:02 2
У Вас нет копиконструктора и operator=
0
1 / 1 / 0
Регистрация: 06.09.2014
Сообщений: 38
09.09.2014, 19:22  [ТС] 3
А когда именно программа будет требовать копиконструктор?
А оператор = нужен, например, тут?
Цитата Сообщение от 12712266 Посмотреть сообщение
mnogestvo3 = mnogestvo1 - mnogestvo2;
Добавлено через 16 минут
Я добавила копиконструктор
C++
1
2
3
4
5
6
7
mnog(const mnog  &R){ //конструктор копирования
        this -> msize = R.msize;
        m = new double [msize];
        for(int i = 0; i<msize; i++){
                m[i] = R.m[i];
        }
    }
И operator =
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
mnog operator=(const mnog &R){//оператор равно
        if(this == &R){
            return *this;
        }
        if(msize != R.msize){
            delete []m;
            m = new double[R.msize];
            size = 0;
            msize = R.msize;
        }
        for(int i = 0; i < msize; i++){
            m[i] = R.m[i];
        }
        size = R.size;
        return *this;
    }
Но все равно почему-то множество остается пустым после операций
Я что-то не так написала?
0
Модератор
Эксперт С++
13496 / 10751 / 6406
Регистрация: 18.12.2011
Сообщений: 28,688
09.09.2014, 19:25 4
operator= должен возвращать ссылку
C++
1
mnog& operator=(const mnog &R)
0
1 / 1 / 0
Регистрация: 06.09.2014
Сообщений: 38
09.09.2014, 19:32  [ТС] 5
Спасибо большое! Не подскажите, что надо написать в return? Не очень понимаю
0
Модератор
Эксперт С++
13496 / 10751 / 6406
Регистрация: 18.12.2011
Сообщений: 28,688
09.09.2014, 19:36 6
В коде ничего менять не надо, только поставить значок & после mnog
1
1 / 1 / 0
Регистрация: 06.09.2014
Сообщений: 38
09.09.2014, 20:05  [ТС] 7
Спасибо!
Но все равно почему-то множество выводится пустым
0
Модератор
Эксперт С++
13496 / 10751 / 6406
Регистрация: 18.12.2011
Сообщений: 28,688
09.09.2014, 20:48 8
Лучший ответ Сообщение было отмечено 12712266 как решение

Решение

Пройдя отладчиком обнаружил, что ошибка в operator+
C++
1
2
3
4
for (int i = size; i < k; i++){ 
            mnogestvo3.m[i] = R.m[i-size]; // было R.m[i]
            r++;
        }
И еще в копиконструкторе забыли
C++
1
        this->size = R.size;
1
1 / 1 / 0
Регистрация: 06.09.2014
Сообщений: 38
09.09.2014, 20:58  [ТС] 9
Спасибо вам огроменное!!! Очень помогли!
0
09.09.2014, 20:58
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.09.2014, 20:58
Помогаю со студенческими работами здесь

Описать класс множество (Set), содержащий следующие элементы
Описать класс множество (Set), содержащий следующие элементы: Поля: 1. Elements (целочисленный...

Описать класс множество с полями элементы множества и количество элементов
c ++:описать класс множество с полями элементы множества и количество элементов, позволяющий...

Описать класс "множество", позваляющий выполнять основные операции
Описать класс &quot;множество&quot;, позваляющий выполнять основные операции: добавление и удаление элемента,...

Описать класс «множество» (добавление и удаление элемента, пересечение, объединение и удаление множеств )
Описать класс «множество», позволяющий выполнять основные операции – добавление и удаление...

Описать класс "множество" вещественных чисел, позволяющий выполнять основные операции
# include &lt;iostream&gt; # include &lt;conio.h&gt; # include &lt;string&gt; # include &lt;stdio.h&gt; #include...

Описать класс "множество", позволяющий выполнять основные операции - добавления и удаление элемента, пересечение, множеств, объединение и разность мно
Люди помогите написать программу, очень нужно!!! Буду очень благодарный........ 1. Описать класс...

Разработать класс Man (человек) и производный класс Student (студент). Описать атрибуты.
Разработать класс Man (человек) и производный класс Student (студент). Описать атрибуты.


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru