IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Поиск элемента в дереве, Бинарное дерево
XBugiman
сообщение 14.04.2009 15:37
Сообщение #1





Группа: Пользователи
Сообщений: 6
Пол: Мужской
Реальное имя: Николай

Репутация: -  0  +


Структура:

PTree=^Tree;
Tree=record
info:string[70];
da,net:PTree;
end;


Нужна процедура/функция, которая возвратит указатель на элемент current содержащийся в дереве. (current: PTtree); В наличии есть root и currnet.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 7)
volvo
сообщение 14.04.2009 15:41
Сообщение #2


Гость






Бинарные деревья -> Поиск заданного элемента
 К началу страницы 
+ Ответить 
XBugiman
сообщение 14.04.2009 16:39
Сообщение #3





Группа: Пользователи
Сообщений: 6
Пол: Мужской
Реальное имя: Николай

Репутация: -  0  +


Прошк прощения, что сразу не уточнил. Нужно найти указатель на узел, который указывает на current.
В узлах содержатся не цифровые значения, а строки.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 14.04.2009 16:54
Сообщение #4


Гость






Цитата
В узлах содержатся не цифровые значения, а строки.
Зачем мне эта информация? Хоть записи, какая разница? Что, строки не сравниваются между собой так же, как и числа?

Цитата
Нужно найти указатель на узел, который указывает на current.
И что же ты собрался возвращать, если у тебя искомое значение содержится в root-е? Нет у него предка, что дальше?
 К началу страницы 
+ Ответить 
XBugiman
сообщение 14.04.2009 18:28
Сообщение #5





Группа: Пользователи
Сообщений: 6
Пол: Мужской
Реальное имя: Николай

Репутация: -  0  +


Цитата(volvo @ 14.04.2009 16:54) *

Зачем мне эта информация? Хоть записи, какая разница? Что, строки не сравниваются между собой так же, как и числа?

И что же ты собрался возвращать, если у тебя искомое значение содержится в root-е? Нет у него предка, что дальше?

Нужно сравнивать не строки, а условие, что искомый! указатель указывает на узел current, нужно вернуть этот указатель. Он в дереве по умолчанию присутствует
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 15.04.2009 11:15
Сообщение #6


Гость






В Турбо Паскале над указателями не определены никакие операции, кроме сравнения с nil. То есть, тебе надо пройти по дереву, КАЖДЫЙ указатель преобразовать к виду, в котором его можно сравнить с другим указателем (я надеюсь, ты в курсе, что $83DF:$000B и $7FFD:$400B указывают на одну и ту же ячейку памяти, хотя как видишь, сами значения сегментной части и смещений у них совершенно разные), и сравнить с приведенным к тому же виду current... То есть, что-то вроде:

function findptr(root: ttree; curr: ttree): ttree;
var p: ttree;
begin
if root = nil then findptr := nil
else
if (convert(root^.left) = convert(curr)) or (convert(root^.right) = convert(curr)) then findptr := root
else begin
p := findptr(root^.left, curr);
if p = nil then p := findptr(root^.right, curr);
findptr := p;
end;
end;
Функцию Convert попробуй написать сам...

 К началу страницы 
+ Ответить 
passat
сообщение 15.04.2009 15:11
Сообщение #7


Новичок
*

Группа: Пользователи
Сообщений: 32
Пол: Мужской

Репутация: -  0  +


Цитата(XBugiman @ 14.04.2009 19:28) *

Нужно сравнивать не строки, а условие, что искомый! указатель указывает на узел current, нужно вернуть этот указатель. Он в дереве по умолчанию присутствует

Не слишком ли Вы завернули задание?
Узел current при любом раскладе обязан содержать ключ. Какправило, ключ уникален.
Исходя из такой постановки, надо пройти по дереву и найти родителя искомого узла. Поиск самый что ни есть обыкновенный по ключу. А что там является ключом - числа, строки или бегемоты - не имеет ни малейшего значения.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
XBugiman
сообщение 26.04.2009 14:45
Сообщение #8





Группа: Пользователи
Сообщений: 6
Пол: Мужской
Реальное имя: Николай

Репутация: -  0  +


Да вообще то думаю не слишком.
Алгоритм применяется в Делфи, поэтому соот-но функции conv() ни к чему.
Само задание, сделать игру 20 вопросов. А конкретно этот кусок алгоритма используется для определения вопроса на который пользователь ответил неверно, и требуется ввести новый вопрос и объект. Думаю стоит создать отдельную тему в разделе Делфи.

Игра 20 вопросов
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 18.06.2025 10:41
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"