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

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

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

> Поиск по дереву..., бинарному...
DiSkEtKa
сообщение 23.05.2006 9:31
Сообщение #1


Пионер
**

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

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


Привет всем! Подскажите пожалуйста что необходимо сделать, чтоб процедура поиска элемента в моем бинарном дереве работала??......Я смотрела FAQ....но не разобралась.....до конца..

uses crt;
type pspisok=^derevo;
derevo=record
i:string;
nextL:pspisok;
nextR:pspisok;
end;
var r,r1:pspisok;
a:string;
c:char;
procedure dobavl(var r,r1:pspisok);
begin
if r=nil then r:=r1
else if r1^.i>r^.i then dobavl(r^.nextR,r1)
else dobavl(r^.nextL,r1)
end;
procedure vyvod(var r:pspisok);
begin
if r<>nil then
begin
vyvod(r^.nextL);
writeln(r^.i);
vyvod(r^.nextR)
end
end;
procedure poisk(var r:pspisok;a:string);
var y:boolean;
begin
if r=nil then writeln('net');
if r^.i=a then writeln('est')
else if a>r^.i then poisk(r^.nextR,a)
else poisk(r^.nextL,a);
end;
begin
clrscr;
r:=nil;
c:='y';
while c='y' do
begin
writeln('Введите элемент');
readln(a);
new(r1);
r1^.i:=a;
r1^.nextL:=nil;
r1^.nextR:=nil;
dobavl(r,r1);
writeln('Продолжить ввод? y/n');
readln( c );
end;
writeln('Дерево:');
vyvod( r );
readkey;
end.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
DiSkEtKa
сообщение 23.05.2006 14:18
Сообщение #2


Пионер
**

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

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


Цитата
Если не сделаешь выход из процедуры - получишь ошибку при попытке обратиться по нулевому указателю...

а я то об этом даже и не думала...спасибо за исправление...
Но у меня есть ещё какие то проблемы в этой процедуре поиска...я же правильно пишу условия при которых писать "нет элемента" и ''есть элемент''??Если кто-нибудь увидит ошибку, то покажите где пожалста

procedure poisk(r:pspisok; a:string);
var y:boolean;
begin
if r = nil then begin
writeln('net');
exit;
end;
if r^.i = a then writeln('est')
else
if a > r^.i then poisk(r^.nextR, a)
else poisk(r^.nextL, a);
end;


Сообщение отредактировано: volvo - 3.11.2006 22:10
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


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

 



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