Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Букер
1 / 1 / 0
Регистрация: 01.10.2016
Сообщений: 63
Завершенные тесты: 1
#1

Класс "множество целых чисел" с операциями объединения, пересечения, дополнения

09.04.2017, 09:56. Просмотров 216. Ответов 1
Метки нет (Все метки)

Set.h
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
using namespace std; 
class Set
{
    int *nums; // множество целых чисел
    size_t capacity; // число ненулевых элементов множества
    size_t size; // максимальное число элементов, которое может быть во множестве
public:
    Set(); 
    Set(size_t); 
    Set(Set &); 
    virtual ~Set(); 
    friend Set operator^(Set &, int); // добавление элемента
    friend Set operator/(Set &, int); // удаление элемента
    friend bool operator==(Set &, Set &); // равны ли множества? 
    friend bool operator!=(Set &, Set &); // неравны ли множества? 
    friend Set operator+(Set &, Set &); // объединение множеств
    friend Set operator*(Set &, Set &); // пересечение множеств
    friend Set operator-(Set &, Set &); // дополнение 2-го множества
    friend void Sort(Set &); // размещение ненулевых элементов в начале множества
};
Set operator^(Set &, int); 
Set operator/(Set &, int); 
bool operator==(Set &, Set &); 
bool operator!=(Set &, Set &); 
Set operator+(Set &, Set &); 
Set operator*(Set &, Set &); 
Set operator-(Set &, Set &); 
void Sort(Set &);
Set.cpp
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
#include "Set.h"
void Sort(Set &obj)
{
    int a = 0; // вспомогательная переменная
    for (size_t i = 0; i < obj.size; ++i)
    {
        if (obj.nums[i] != 0)
        {
            obj.nums[a] = obj.nums[i]; 
            ++a; 
        }
    }
}
Set operator^(Set &obj, int term)
{
    int a = 0; 
    for (size_t i = 0; i < obj.capacity; ++i)
    {
        if (obj.nums[i] == term)
        {
            ++a; 
            break; 
        }
    }
    if (a == 0)
    {
        obj.nums[obj.capacity] = term; 
        ++obj.capacity; 
    }
    return obj; 
}
Set operator/(Set &obj, int term)
{
    for (size_t i = 0; i < obj.capacity; ++i)
    {
        if (obj.nums[i] == term)
        {
            obj.nums[i] = 0; 
            --obj.capacity; 
            break; 
        }
    }
    Sort(obj); 
    return obj; 
}
bool operator==(Set &obj1, Set &obj2)
{
    if (obj1.capacity != obj2.capacity)
    {
        return false; 
    }
    int a = 0; 
    for (size_t i = 0; i < obj1.capacity; ++i)
    {
        for (size_t j = 0; j < obj2.capacity; ++j)
        {
            if (obj1.nums[i] == obj2.nums[j])
            {
                ++a; 
            }
        }
    }
    if (a == obj1.capacity)
    {
        return true; 
    }
    return false; 
}
bool operator!=(Set &obj1, Set &obj2)
{
    if (obj1 == obj2)
    {
        return false; 
    }
    return true; 
}
Set operator+(Set &obj1, Set &obj2)
{
    Set obj3; 
    for (size_t i = 0; i < obj1.capacity; ++i)
    {
        obj3.nums[i] = obj1.nums[i]; 
        ++obj3.capacity; 
    }
    for (size_t i = 0; i < obj2.capacity; ++i)
    {
        obj3 = obj3 ^ ob2.nums[i]; 
    }
    return obj3; 
}
Set operator*(Set &obj1, Set &obj2)
{
    Set obj3; 
    for (size_t i = 0; i < obj1.capacity; ++i)
    {
        for (size_t j = 0; j < obj2.capacity; ++j)
        {
            if (obj1.nums[i] == obj2.nums[j])
            {
                obj3.nums[obj3.capacity] = obj1.nums[i]; 
                ++obj3.capacity; 
            }
        }
    }
    return obj3; 
}
Set operator-(Set &obj1, Set &obj2)
{
    Set obj3; 
    for (size_t i = 0; i < obj1.capacity; ++i)
    {
        obj3.nums[i] = obj1.nums[i]; 
        ++obj3.capacity; 
    }
    for (size_t i = 0; i < obj3.capacity; ++i)
    {
        for (size_t j = 0; j < obj2.capacity; ++j)
        {
            if (obj3.nums[i] == obj2.nums[j])
            {
                obj3 = obj3 / obj3.nums[i]; 
            }
        }
    }
    return obj3; 
}
Как избавиться от дублирования кода? С полностью повторяющимися кусками кода все понятно, их можно засунуть в функцию. Как быть с циклами, похожими друг на друга, но не одинаковыми? Они отличаются, поэтому функция не вариант. Преподаватель говорил, что нужно использовать виртуальные методы, создавать какие-то дополнительные классы. Я так ничего и не понял.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.04.2017, 09:56
Ответы с готовыми решениями:

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

Ввести класс для работы с объектом "множество целых чисел"
6)Ввести класс для работы с объектом &quot;множество целых чисел&quot;.Реализовать:...

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

Класс "Пара чисел" с перегруженными операциями сложения и умножения
Брат, братан, братишка помоги у нас решили вести ООП на с++ а я в нем ту-ту...

Перегрузка операторов для класса "множество целых чисел"
Собственно, в этом и вопрос. Как перегрузить операторы &quot;+&quot; и &quot;-&quot; для...

1
nonedark2008
09.04.2017, 10:20     Класс "множество целых чисел" с операциями объединения, пересечения, дополнения
  #2

Не по теме:

Цитата Сообщение от Букер Посмотреть сообщение
Я так ничего и не понял.
Не переживай, я тоже.

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.04.2017, 10:20
Привет! Вот еще темы с ответами:

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

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

Реализовать класс родительский класс "Пара чисел" и класс-наследник "Комплексное число"
Ткма работы создать класс pair (пара чисел); определить метод перемножения...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru