![]() |
Модераторы: bsa |
![]() ![]() ![]() |
|
lenarano |
|
||||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 62 Регистрация: 17.4.2014 Репутация: нет Всего: нет |
Ребята, помогите с конструктором и деструктором для моего дерева.
Значения для дерева ключ и строка берутся из файла. Я так понимаю, что мне нужно просто сделать так, что бы в начальных значениях был не "мусор". Тут в заголовочном файле вроде все правильно
А вот тут нужна помощь, как правильно написать конструктор и деструктор
Добавлено через 13 минут и 26 секунд Я в интернете нашла только такие варианты
Но я так понимаю, что мне они не подходят , из-за того, что я добавляю все из файлов. Нашла, что в таких случаях можно обойтись без конструктора. Главное, что бы значения указателей и полей были проинициализированы 0. Но я знаю, что преподаватель будет их требовать((( |
||||||
|
|||||||
lenarano |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 62 Регистрация: 17.4.2014 Репутация: нет Всего: нет |
Вот на всяких случай, что я делаю в main
При том как у меня сейчас написан конструктор, ругается на эти строчки Derevo.show(Tree); //Derevo().show(Tree); ? Derevo.add_node(k, line.substr(0, 20), Tree); Еще хотела спросить, насколько нужна вот эта строчка в main. TreeNode *Tree=NULL; |
|||
|
||||
lenarano |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 62 Регистрация: 17.4.2014 Репутация: нет Всего: нет |
Вот эта функция работает, как деструктор-удаляет все. Может ее просто втавить в сам деструктор?
|
|||
|
||||
lenarano |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 62 Регистрация: 17.4.2014 Репутация: нет Всего: нет |
![]() |
|||
|
||||
feodorv |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 12 Всего: 45 |
У Вас есть два разных типа объектов - само дерево и узел этого дерева. При наивном программировании, конечно, можно объединить эти два объекта в один гибридный, но тогда и возникают разные проблемы, в том числе и с конструктором/деструктором.
Для объекта типа дерево определяется указатель на корень дерева и методы по добавлению/удалению узла:
А для объекта типа узел - данные узла (которые должны быть разрушены в деструкторе) и указатели на левого и правого потомка:
Так потихоньку можно будет и к шаблонам перейти... Это сообщение отредактировал(а) feodorv - 13.5.2015, 16:33 -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
||||
|
|||||
lenarano |
|
||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 62 Регистрация: 17.4.2014 Репутация: нет Всего: нет |
Начала делать и у меня полезли такие ошибки(( В основном в //TreeNode.cpp. Мое дерево, объявленное дружественным не видит элементы узла. Уверена, что перепутала параметры в функциях. Сама буду разбираться долго Может укажете на ошибки?
/
|
||||
|
|||||
feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 12 Всего: 45 |
Я бы сделал так:
Это сообщение отредактировал(а) feodorv - 14.5.2015, 02:14 -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
lenarano |
|
||||||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 62 Регистрация: 17.4.2014 Репутация: нет Всего: нет |
Спасибо большое, стало понятней. Вот как получилось.
У меня вопрос по main. По заданию я должна открыть 2 файла. Один с числами(которые будут как ключи) и один со строками(часть из них будут полиндромами). Ввести эти данные в дерево причем строка была не более 20 символов. Делала я это с помощью этой функции.
А теперь как?
|
||||||||
|
|||||||||
feodorv |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 12 Всего: 45 |
Это у Вас объявление функции (без параметров, возвращающую экземпляр класса Tree), а не переменной. Наверное, Вы хотели сказать:
В моём коде в main все есть. Только для подстроки можно написать так:
Конечно, цикл по добавлению в дерево можно было бы и прервать при достижении 10 добавленных узлов. Чего зря данными раскидываться. Но это как уж Вам будет виднее... Ох. Нас ещё ждёт развлечение по удалению узлов дерева ![]() -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
||||
|
|||||
lenarano |
|
||||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 62 Регистрация: 17.4.2014 Репутация: нет Всего: нет |
![]() ![]() Добавила функцию удаление узла. Вроде правильно.
Я правильно понимаю, что сейчас нужно реализовать еще одну функцию типа обхода дерева, но добавить в неё, что если не полиндром, но удаляем этот узел? |
||||||
|
|||||||
lenarano |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 62 Регистрация: 17.4.2014 Репутация: нет Всего: нет |
Еще хотела спросить. У нас сейчас есть функция bool Node::is_palindrome(), которая читает только слова, т.е. если есть фраза-перевертыш с пробелами, то она возвращает 0. Я создала функцию, которая убирает пробелы из фраз.
А как ее сейчас совместить с нашей bool Node::is_palindrome(), или нужно было просто добавить как-то этот кусок кода в bool Node::is_palindrome(). |
|||
|
||||
feodorv |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 12 Всего: 45 |
Опять же, для наивного программирования за основу взять можно. Но.
Что означает это сравнение? Зачем эта функция????
Так вы невозвратимо испортите изначальную строку. Можно поменять алгоритм определения палиндрома, а можно в функции is_palindrome() создать локальную переменную типа std::string, в неё скопировать первоначальный polinom, в ней же удалить пробелы, и для неё же применить уже имеющийся алгоритм. Тогда никаких remove_spaces() (да ещё и сделанных с ошибками) не понадобиться... -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
||||
|
|||||
lenarano |
|
||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 62 Регистрация: 17.4.2014 Репутация: нет Всего: нет |
я этот алгоритм нашла в нете, просто пробовала адаптировать к моему куску кода. Переделала: void Tree::destroy(Node *node ). А можно ваш вариант этой функции, но закоментированный, чтобы я могла понять алгоритм удаления узла.
А если менять просто алгоритм, то что нужно добавить?Те варианты, которые я использовала влияли на саму строку. |
||||
|
|||||
lenarano |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 62 Регистрация: 17.4.2014 Репутация: нет Всего: нет |
Решила поменять алгоритм нахождения полинома. Для того, чтобы не испортить строчку написала так const std::string& stroka. В принципе работает, но считает полиндромом только тогда, когда написано так "а луна канула" и не работает, когда так "А луна канула". Хотя вроде функцию tolower использую. Можно было бы конечно все фразы в файле переписать на строковые буквы. Но все же почему ошибка?
|
|||
|
||||
feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 12 Всего: 45 |
![]() Эх, в виндах все с этим не просто. tolower не отрабатывает на русских буквах, так как не выставлена локальная кодировка. Теоретически, setlocale должна помочь, но как она сочетается с SetConsole*() - без понятия. Я же говорил, что готовится развлечение ![]() -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |