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

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

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

> двоичное дерево, создание, вставка, печать, поиск, удален
сообщение
Сообщение #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 -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Гость






... удалено...


Пожалуйста, если вы хотите задать вопрос, то создайте новый топик, а не пишите его в чужой. Второй раз удаляю...

Сообщение отредактировано: APAL -
 К началу страницы 
+ Ответить 

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


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

 





- Текстовая версия 10.09.2025 1:29
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name