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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.05.2008, 17:18   #1
Astor
Пользователь
 
Регистрация: 23.04.2008
Сообщений: 27
Восклицание Помогите прокомментировать прогу

Вот прога, помогите разобраться, что здесь к чему! прост с языком паскаль очень плохо знаком! комментарии желательненько подробные! С меня пиво
Код:
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, 'out.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, 'in.txt');
   Rewrite(txtfile);
   writeln(txtfile, s);
   Close(txtfile);

   readln;
end.
Astor вне форума Ответить с цитированием
Старый 20.05.2008, 21:28   #2
Astor
Пользователь
 
Регистрация: 23.04.2008
Сообщений: 27
По умолчанию

ребят, короче мне помогли прогу прокоментить, вот код
Код:
{Типы данных}
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, 'out.txt');{сопоставляем переменной имя входного файла}
   Reset(txtfile);{открываем его для чтения}
   s := '';{обнуляем строку}
   while not eof(txtfile) do begin{пока указатель не достиг конца файла}
      Readln(txtfile, S1);{производим из него чтение данных в переменную 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);{сохраняем слово в переменную S1}
         delete(s, 1, Pos(',', S));{Удаляем это слово из строки S т. к. не нужно более}
         insTree(kd, N, 1, S1);{И вставляем это слово из переменной S1 В дерево}
         inc(N);{увеличиваем счетчик N на 1(переходим к следующему узлу)}
      end;
   end;

   s := '';{обнуляем строку}
   PrintTree(s, kd);{обход дерева}

   Assign(txtfile, 'in.txt');{сопоставление файловой переменной с именем файла}
   Rewrite(txtfile);{создаем/перезаписываем файл}
   writeln(txtfile, s);{пишем в него данные}
   Close(txtfile);{закрываем файл}

   readln;
end.
теперь прошу помочь мне разобраться что такое процедуры и как используется то что указано в скобках после них? например Procedure PrintTree(var S:String; t:TreeLink); и еще прошу подробней объяснить обход и формирование дерева
Astor вне форума Ответить с цитированием
Старый 20.05.2008, 21:28   #3
Astor
Пользователь
 
Регистрация: 23.04.2008
Сообщений: 27
По умолчанию

ребят, короче мне помогли прогу прокоментить, вот код
Код:
{Типы данных}
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, 'out.txt');{сопоставляем переменной имя входного файла}
   Reset(txtfile);{открываем его для чтения}
   s := '';{обнуляем строку}
   while not eof(txtfile) do begin{пока указатель не достиг конца файла}
      Readln(txtfile, S1);{производим из него чтение данных в переменную 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);{сохраняем слово в переменную S1}
         delete(s, 1, Pos(',', S));{Удаляем это слово из строки S т. к. не нужно более}
         insTree(kd, N, 1, S1);{И вставляем это слово из переменной S1 В дерево}
         inc(N);{увеличиваем счетчик N на 1(переходим к следующему узлу)}
      end;
   end;

   s := '';{обнуляем строку}
   PrintTree(s, kd);{обход дерева}

   Assign(txtfile, 'in.txt');{сопоставление файловой переменной с именем файла}
   Rewrite(txtfile);{создаем/перезаписываем файл}
   writeln(txtfile, s);{пишем в него данные}
   Close(txtfile);{закрываем файл}

   readln;
end.
Astor вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите сделать прогу AG_Mill Помощь студентам 2 25.04.2008 19:44
Нужно полностью прокомментировать каждую строчку решеннной задач на С++, помогите, плиз!!!! Fialaka_444 Помощь студентам 1 22.12.2007 19:30
Помогите исправит прогу!!! Ванька Помощь студентам 1 25.11.2007 14:47
помогите отредактировать прогу finch Помощь студентам 3 25.06.2007 07:42
Помогите разобрать прогу! Mute Общие вопросы C/C++ 2 28.12.2006 11:34