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

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

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

> двоичное дерево, создание, вставка, печать, поиск, удален
andr
сообщение 31.10.2004 23:39
Сообщение #1





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

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


мне надо сделать задачку с двочным деревом. выкладываю то, что сделал на данный момент, НЕ РАБОТАЮТ процедуры поиска и удаления. причина - не знаю. поиск выдает неправильный ответ, удаление даже не компилируется.

может быть кто-нибудь ошибку найдет?

Код

uses crt;

type u=^bintree;
    rec = record
      dist : string;
      num : string;
      name : string;
      date : string;
    end;
    bintree = record
      inf : rec;
      l, r : u;
    end;

var
 tree : u;
 fi, fo : text;

procedure ins(var tr : u; p : bintree); {работает}
begin
 if tr = nil then
 begin
   new(tr);
   tr^ := p;
 end
 else if p.inf.name < tr^.inf.name then
 ins(tr^.l,p) else
 ins(tr^.r,p);
end;

procedure insall; {работает}
var z : bintree;
begin
 while not seekeof(fi) do
 begin
   with z do begin
     readln (fi, inf.dist, inf.num, inf.name, inf.date);
     l := nil;
     r := nil;
     ins(tree, z);
   end;
 end;
end;

procedure printtree(t : u); {работает}
begin
 if t <> nil then
 begin
   printtree(t^.l);
   with t^.inf do
   begin
     writeln(fo, date, num, dist, name);
   end;
   printtree(t^.r);
 end;
end;

procedure findname(tree : u; x : string); {компилируется, но выдает неправ. ответ}
begin
 while tree <> nil do
 begin
   if x = tree^.inf.name then
   with tree^.inf do
   begin
     writeln(fo, date, num, dist, name);
   end else if x < tree^.inf.name then tree := tree^.l
                                  else tree := tree^.r;
 end;
 writeln(fo, 'not found')
end;

procedure delall(tree : u); {не компилируется}
begin
 if tree <> nil then
 begin
   delall(tree^.r);
   delall(tree^.r);
   dispose(tree);
   tree := nil;
 end;
end;

begin
 assign(fo, 'out.txt');
 rewrite(fo);
 assign(fi, 'in.txt');
 reset(fi);
 tree := nil;
 insall;
 printtree(tree);
 close(fo);
 close(fi);
end.


Сообщение отредактировано: andr - 31.10.2004 23:41
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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


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

 



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