Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.04.2008, 18:16   #21
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

Astor, сразу не сообразил. При таком заполнении дерева можно проще сделать. Опять на Delphi, но функций нет.

Неплохо бы приводить код ошибки и место, где она возникает.

Код:
type
   TreeLink = ^Tree;
   Tree = record
      Data: string;
      Left, Right: TreeLink;
   end;

procedure InsTree(var t:TreeLink; Num, NumNode : integer; S:String);
var PNum, LNum, k : integer;
begin
   if t = nil then begin
      new(t);
      with t^ do begin
         Left  := nil;
         Right := nil;
         Data  := S;
      end;
   end else begin
      { По текущему номеру узла можно определить номер
        узлов, которые справа и слева от него }
      k := 1; PNum := NumNode;
      While PNum > k do begin
         PNum := PNum - k;
         k := k * 2;
      end;
      { PNum - номер узла внутри уровня от 1 }
      { LNum - номер левого узла от текущего }
      LNum := (PNum-1)*2 + NumNode - PNum + 1 + k;
      if (LNum = Num) or (t^.Left <> nil)
      then InsTree(t^.left , Num, LNum, S);

      if (LNum+1 = Num) or (t^.Right <> nil)
      then InsTree(t^.Right, Num, LNum+1, S)
   end;
end;

Procedure PrintTree(var S:String; t:TreeLink);
begin
   if t <> nil then begin
      PrintTree(S, t^.left);
      PrintTree(S, t^.right);
      S := S + t^.data + ',';
   end;
end;

var txtfile : text;
    S, S1 : String;
    kd: TreeLink;
    N, i:integer;
begin
   kd := nil;
   Assign(txtfile, 'in.txt');
   Reset(txtfile);
   s := '';
   while not eof(txtfile) do begin
      Readln(txtfile, S1);
      if S1[length(s1)] <> ',' then s1 := s1 + ',';
      s := s + s1;
   end;
   Close(txtfile);

   N := 1; // Номер узла
   for i := 1 to length(s) do begin
      while (Pos(',', s) > 0) do begin
         S1  := copy(s, 1, Pos(',', S) - 1);
         delete(s, 1, Pos(',', S));
         insTree(kd, N, 1, S1);
         inc(N);
      end;
   end;

   s := '';
   PrintTree(s, kd);

   Assign(txtfile, 'out.txt');
   Rewrite(txtfile);
   writeln(txtfile, s);
   Close(txtfile);

   readln;
end.

Последний раз редактировалось alexBlack; 25.04.2008 в 18:19.
alexBlack вне форума Ответить с цитированием
Старый 25.04.2008, 18:39   #22
Astor
Пользователь
 
Регистрация: 23.04.2008
Сообщений: 27
По умолчанию

РЕБЯТА, БОЛЬШОЕ ВАМ СПАСИБО! ВСЕ РАБОТАЕТ ПРАВИЛЬНО! БЛАГОДАРЕН ВАМ ЗА ПОМОЩЬ! но еще одна просьба - мне уже просто стыдно просить, заливаюсь краской, не поможете с комментариями к коду? просто надо разобраться и понять(без этого никак), я вам надоел уже наверно, простите меня такого
Astor вне форума Ответить с цитированием
Старый 25.04.2008, 18:40   #23
Astor
Пользователь
 
Регистрация: 23.04.2008
Сообщений: 27
По умолчанию

alexBlack, уже все норм! разобрался я! спасиб еще раз
Astor вне форума Ответить с цитированием
Старый 25.04.2008, 18:55   #24
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

В посте #16 добавил комментарии
alexBlack вне форума Ответить с цитированием
Старый 25.04.2008, 19:47   #25
Astor
Пользователь
 
Регистрация: 23.04.2008
Сообщений: 27
По умолчанию

СПАСИБО! Буду разбираться и понимать! Благодарю за помощь
Astor вне форума Ответить с цитированием
Старый 26.04.2008, 16:02   #26
Astor
Пользователь
 
Регистрация: 23.04.2008
Сообщений: 27
По умолчанию

Здравствуйте снова, сегодня показал преподавателю программу! он принял - но я объяснил все очень поверхостно! сочинял на ходу! можете сделать комментарии очень подробные, для чего нужна каждая строчка? а то я не очень могу разобраться! объясните пожалуста даже для чего например надо вот это
Код:
Type
  TreeLink = ^Tree;
  Tree = Record
       Number: Integer;
       Data : String;
       Left, Right : TreeLink;
  End;
что означает каждая переменная! я знаю что прошу от вас многого но будьте ко мне добры! зарание СПАСИБО
Astor вне форума Ответить с цитированием
Старый 26.04.2008, 16:03   #27
Astor
Пользователь
 
Регистрация: 23.04.2008
Сообщений: 27
По умолчанию

ТО есть объясните мне все! как все происходит! спасибо
Astor вне форума Ответить с цитированием
Старый 26.04.2008, 16:44   #28
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

да.. отсюда однозначно следует вывод, что программа, которую Вы привели - написана не Вами.. ;-(
Type - ключевое слово Паскаль - начали описание своих типов
TreeLink = ^Tree; - тип TreeLink является ссылкой (указателем) на тип Tree
Tree = Record - тип Tree - это запись (структура), состоящая из:
Number: Integer; - Number - переменная целочисленного типа
Data : String; - строка
Left, Right : TreeLink; - и два указателя на тип Tree Left - на левую ветку, Right - на правую ветку
End; - описание типа Tree закончено

в указатель (он же pointer, он же ссылка) помещается адрес другой переменной. в нашем случае адрес переменной типа Tree

понятненько?..

вот, случайно поиск нажал - в яндексе- "Вершина в двоичном дереве имеет значение и два указателя, left и right, которые показывают на его дочерние вершины......"

Последний раз редактировалось Serge_Bliznykov; 26.04.2008 в 16:49. Причина: добавил ссылку на яндекс...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 26.04.2008, 17:12   #29
Astor
Пользователь
 
Регистрация: 23.04.2008
Сообщений: 27
По умолчанию

Дак я же говорил что ту программу писал не я! Мне помогали! Но обхода дерева не было! Спасибо за эти комменты, но можно всю программу прокомментировать?? Очень прошу
Astor вне форума Ответить с цитированием
Старый 27.04.2008, 12:39   #30
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
но можно всю программу прокомментировать
наверное, можно.. но я бы не взялся... ;-)
Попробуйте сделать это сами - будут вопросы по конкретным строчкам/операторам - милости прошу...
А так - до безумия можно дойти ;-((
if t <> nil then begin - если переменная t не равняется NIL (пустому указателю), тогда... оно Вам надо? неужели непонятно, что делает, например, такая строчка:
s := '';
или такая:
Close(txtfile); ???
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ПОМОГИТЕ, ОЧЕНЬ ПРОШУ Help me Свободное общение 4 01.09.2008 09:29
очень прошу помогите решить задачки Марин@ Помощь студентам 1 24.04.2008 18:27
Помогите решить две задачи! очень прошу... DmT Фриланс 1 23.10.2007 23:19