7 / 7 / 4
Регистрация: 07.09.2012
Сообщений: 178
|
||||||
1 | ||||||
Нюанс в работе с классом11.02.2013, 00:56. Показов 2345. Ответов 29
Метки нет (Все метки)
задача такая создать класс для работы с множествами
и реализовать в нём функции для объединения разности множеств и т.д если я запонляю поля класса так как в коде
или нужно заранее создавать два множества(массива)и над ними проводить операции? ps по форумам ответа не нашел,подобной темы тоже,в справочная литература которую обычно использую не дала ответа на этот вопрос)
0
|
11.02.2013, 00:56 | |
Ответы с готовыми решениями:
29
Ошибка при работе с классом Access volation при работе с классом Не вызывается деструктор при работе с классом Ошибка при работе с абстрактным классом pair |
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
|
|
11.02.2013, 01:04 | 2 |
Хмм. Делаешь класс для работы с множеством. Кстати, в качестве хранилища выгоднее использовать std:vector.
А далее создаешь функции типа Aggregate AggrCross(Aggregate A, Aggregate B) - для пересечения. А в классе множества сделать метод для проверки наличия элемента в данном множестве. Кстати, можно еще просто перегрузить некоторые операторы, например + для объединения / - для разности и т.д.
1
|
7 / 7 / 4
Регистрация: 07.09.2012
Сообщений: 178
|
|
11.02.2013, 01:14 [ТС] | 3 |
nonedark2008, спасибо за совет,я и не знал про то что функция обьедениня реализована в vector(просто ещё не изучал)завтра по практикую,результат если что не получится напишу
0
|
4773 / 2582 / 894
Регистрация: 29.11.2010
Сообщений: 5,590
|
||||||
11.02.2013, 01:21 | 4 | |||||
На всякий случай, переспросите преподавателя, чтобы не получить негативную оценку, как именно должна быть реализована структура хранения данных. Чаще всего работа со "множествами" подразумевает создание дерева или хэш-таблицы в качестве хранилища для данных, а не массива.
Функции-члены классы могут получать доступ к приватным полям объектов того же класса.
0
|
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
|
|
11.02.2013, 02:48 | 5 |
lemegeton, конечно в виде дерева хранить выгоднее с точки зрения производительности. Но я сомневаюсь, что сдесь именно этот случай... А так, можно было бы устроить красно-черное дерево для хранения множества...
0
|
7 / 7 / 4
Регистрация: 07.09.2012
Сообщений: 178
|
|
11.02.2013, 21:17 [ТС] | 6 |
lemegeton,
nonedark2008, однозначно вектор, дерево,хеш таблицы мы не проходили,и это есть в темах, но на будущие,это работа с классами и с указателями внутри класса,динамическое выделение памяти,под массивы.По этому нужно использовать что есть.
0
|
Пес войны
111 / 88 / 22
Регистрация: 23.02.2012
Сообщений: 653
|
||||||||||||||||
11.02.2013, 21:31 | 7 | |||||||||||||||
кодобред
2
|
7 / 7 / 4
Регистрация: 07.09.2012
Сообщений: 178
|
|
11.02.2013, 21:43 [ТС] | 8 |
NeonLost, константу обьявлять как хочу могу,какая разница то?
а delete нет потому что кода нету,сначала нужно код накатать а потом уже в конце штрихи,ну это я за себя
0
|
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
|
|
11.02.2013, 21:54 | 9 |
Vlad_, const - имя определенное в стандарте языка. Имхо, когда кто-то будет читать ваш код и увидит ЭТО, то не поймет. Что вам мешает сейчас написать #define main 2 а потом удивляться, почему ничего не компилируется?
Если таким способом строить программу, то в конце будет огромная куча ошибок, из тех "штрихов", которые вы не доделали, забыли сделать, или посчитали не нужными. И говорю сразу, потом их очень сложно выискивать.
1
|
7 / 7 / 4
Регистрация: 07.09.2012
Сообщений: 178
|
|
11.02.2013, 22:51 [ТС] | 10 |
nonedark2008, аа вы за это,я как то и не обратил внимание,поправил,
Добавлено через 39 минут а что будет результатом конструктора копирования,ведь просто объединить не то,ещё нужно отловить повторения + желательно сортировку сделать
0
|
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
|
|
12.02.2013, 08:08 | 11 |
Vlad_, можно реализовать функцию проверки, ноходится ли данный элемент в множестве или нет. Например, пересечение: у нас есть два множества и множество, в которое записывается результат. Пробегаем по всем элементам первого, если такой элемент есть во втором, то добавляем его. Т.е. нужно реализовать функцию добавления элемента в множество, можно добавлять элемент так, чтобы множество было отсортировано.
0
|
7 / 7 / 4
Регистрация: 07.09.2012
Сообщений: 178
|
||||||
17.02.2013, 16:59 [ТС] | 12 | |||||
nonedark2008, а можно как то на моём коде это дописать?
У меня получилось сделать на объединение и разность однако как сделать что бы пересечение и проверку пренадлежности,не знаю.
0
|
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
|
|
17.02.2013, 17:13 | 13 |
Vlad_, разность и объединение написаны не верно. Разность - вообще неверно. Объединение - нужно удалять повторяющиеся элементы. Сделай возможность добавлять элементы в множество, иначе не сможешь проверить. Поиск - просто пробегаешь по массиву и сравниваешь с тем что ищешь.
0
|
7 / 7 / 4
Регистрация: 07.09.2012
Сообщений: 178
|
|
17.02.2013, 18:38 [ТС] | 14 |
nonedark2008, а можно как-то поконкретней,пример кода, потому что мне вообще не ясно "добавлять элементы в множество"
в какое множество? поиск я пробовал сделать тоже не вышло выдавало типо связанное что элемент(который задавался для поиска) не относится к const DynArray
0
|
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
|
|
17.02.2013, 19:28 | 15 |
Код у меня нет времени писать, тем более я не дома. У тебя есть класс DynArray, в котором должно хранится множество. Как хранится множество? В массиве, где каждый элемент - элемент множества. Как инициализировать множество? В конструкторе передаешь кол-во элементов, и например массив с этими элементами, а затем копируешь их в созданный внутри класса массив. Как объединять? Тут проблема, можно было бы просто создать множество, в которое запихать элементы из двух других, но тогда попадут и повторяющиеся, что не нужно. Если есть множества с мощностью N1 и N2, то мощность их объединения <= N1 + N2. Т.е. если для их объединения выделить N1+N2 элемента, то этого будет достаточно. Но тогда нужна будет еще одна переменная, чтобы хранить сколько всего элементов в множестве. Как отсеивать повторяющиеся, мы просто добавляем каждый элемент из первых двух, но перед этим кадый раз проверяем - не добавляли ли мы такой элемент ранее. DynArray - из названия следует, что это класс для динамического массива. Т.е. он должен быть динамическим, чего нет. Что нужно? В начале ты указываешь размер массива n, но в последствии, если ты захочешь добавить n+1 элемент, то массив должен увеличиться, чтобы он туда влез.
Т.е. фактически, у тебя должен быть класс, в котором есть массив, кол-во элементов в массиве и текущее кол-во хранимых элементов в массиве. Короче, прежде чем тебе реализовывать работу с множествами - тебе нужно сделать нормальную реализацию динамического массива, с динамическим расширением массива, добавлением элементов, поиском, удалением элементов.
0
|
7 / 7 / 4
Регистрация: 07.09.2012
Сообщений: 178
|
|||||||||||
23.02.2013, 15:56 [ТС] | 16 | ||||||||||
nonedark2008, если делать так как вы говорите то возникает проблемы при передаче объектов,и получается передать либо кол-во объектов либо размерность объекта
error C2676: бинарный "[": "const Set" не определяет этот оператор или преобразование к типу приемлемо к встроенному оператору
0
|
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
|
|
23.02.2013, 18:19 | 17 |
Посомтри типы элементов, где происходит присваивание - явное несоответствие.
Еще раз повторюсь, забей пока на множества. Тебе нужно сделать класс динамического массива - по нему примеров должно быть достаточно. А уже на основе него нужно делать класс множества.
0
|
Пес войны
111 / 88 / 22
Регистрация: 23.02.2012
Сообщений: 653
|
||||||||||||||||
23.02.2013, 20:49 | 18 | |||||||||||||||
мне кажется или на этом месте
и я не догнал...почему ты используешь скобки, если ты их не перегрузил?
0
|
177 / 163 / 21
Регистрация: 12.02.2013
Сообщений: 410
|
|
23.02.2013, 21:46 | 19 |
А нельзя пользоваться vector в качестве динамического массива и с его помощью реализовать класс множество, который просто следит за уникальностью в нем элементов?
0
|
7 / 7 / 4
Регистрация: 07.09.2012
Сообщений: 178
|
|
24.02.2013, 17:55 [ТС] | 20 |
ITcrusader, использовать и можно только вот в рамки не входит,нужно ограничится только,классами ну и шаблонами классов максимум.
Добавлено через 3 часа 3 минуты а если использовать вектор как это упростит задачу?
0
|
24.02.2013, 17:55 | |
24.02.2013, 17:55 | |
Помогаю со студенческими работами здесь
20
Краткое руководство по работе с классом TCanvas для начинающих Исключение при работе с классом System.Collections.Generic.Dictionary Изменить табуляцию при работе с классом XmlDocument перед сохранением файла "Индекс находится за пределами массива" при работе с классом Task Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |