Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Поиск заданого элемента в бинарном дереве поиска

Автор: neic 5.12.2007 4:11

Вот слепил из того что было.
Взял исходники с сайта volvo.

Ввожу с клавиатуры: 5 4 3 2 1
Не получается организовать поиск либо из-за того что я не правильно ввожу, или не правильно пользуюсь процедурой. Вот исходник:


uses CRT;
type
T = integer;

TTree = ^TNode;
TNode = record
value: T;
Left, Right: TTree;
end;

procedure Insert(var Root: TTree; X: T);

procedure CreateNode(var p: TTree; n: T);
begin
New(p);
p^.value := n;
p^.Left := nil;
p^.Right := nil
end;

begin
if Root = nil then CreateNode(Root, X)
else
with Root^ do begin
if value < X then Insert(Right, X)
else
if value > X then Insert(Left, X)
end;
end;

function Find(Root: TTree; X: T): TTree;
var p: TTree;
begin
if Root <> nil then begin
p := Root;
while p <> nil do begin
if X < p^.value then p := p^.Left
else
if X = p^.value then Break
else p := p^.Right
end;
Find := p
end
else find:=nil;


end;
var s: integer;
root,q: TTree;

begin
write('Введите любое число от 0 до 100. Конец ввода: 0 ');
repeat
readln(s);
Insert(root,s);
until s=0;

writeln('Введите значение которое хотите найти:');
read(s);
q:=Find(Root,s);

If q<>nil then writeln('Адрес найденого значения:',);

readkey

end.


Автор: volvo 5.12.2007 4:41

А что, собственно, не получается? Напечатать именно адрес? Так он печатается через "Сегмент:Смещение"... Ты ж вообще ничего не печатаешь...

Автор: neic 5.12.2007 4:46

Всё нормально. Я сам себе задачу усложнил =) Мне нужно было просто найти, есть ли это значение или нет.

volvo
Если можешь показать как вывести адрес, буду очень благодарен, а то я немного не понял что за смещение. Так чисто для моего саморазвития.

Автор: volvo 5.12.2007 4:57

If q <> nil then writeln('Адрес найденого значения:', seg(q^), ':', ofs(q^));
Если переведешь распечатанные значения в 16-ричную систему счисления, они должны совпасть с тем, что выдает отладчик...