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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.11.2014, 18:11   #1
now2
Форумчанин
 
Регистрация: 12.03.2014
Сообщений: 217
По умолчанию ТурбоПаскаль очень нужна помощь

задание :Копирование дерева.
тема:Бинарные деревья. Рекурсивный алгоритм обработки
Пример реализации задания:
Код:
program ds_05;
uses ds_unit;
var t:   ptree;
    cnt: integer;
function cnt_node(t:ptree):integer;
{ Входы:     t        - бинарное дерево;
  Выходы:    cnt_node - кол. элементов в дереве;
  Гл. имена: ptree    - тип указателя на дерево;
             llink,rlink - поля связи элемента дерева;
  Функция: Определение кол. эл-тов в дереве t.
}
begin
    if t=nil then begin cnt_node:=0; exit end;
    cnt_node:=1 + cnt_node(t^.llink) + cnt_node(t^.rlink); {два рекурсивных вызова}
end; {cnt_node}

begin
    gentree(t);
    puttree(t);
    writeln('Количество элементов в дереве: ',cnt_node(t));
    escwait;
end.
по такому примеру надо сделать задачу ,в деревьях огромная проблема

Последний раз редактировалось ACE Valery; 26.11.2014 в 18:14.
now2 вне форума Ответить с цитированием
Старый 26.11.2014, 19:09   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Код:
program Project1;
type
  //Наши веточки древа
  PBranch=^TBranch;
  TBranch=record
    Left,Right:PBranch;
    i:integer;
  end;
  //Деревья
  var Hitocu,Futacu:PBranch;

  //Создаем древо рекурсивно
  procedure CreateTree(var Branch:PBranch;Layers:integer);
  begin
   //Если достигнут нулевой слой, т.е. крона - выходим
   if Layers=0 then exit;
   //Иначе... еще по веточке
   New(Branch);
   with Branch^ do begin
     //Задаем им листик
     i:=Layers*10;
     Left:=nil;
     Right:=nil;
   end;
   //И к нему пару череночков, уменьшая номер слоя
   CreateTree(Branch^.Left,Layers-1);
   CreateTree(Branch^.Right,Layers-1);
  end;

//Скопируем древо
procedure CopyTree(var BranchSource,BranchDest:PBranch);
begin
 //Если достигнута вершина - выходим
 if BranchSource=nil then exit;
 //Иначе клонируем черенок за черенком
 New(BranchDest);
 with BranchDest^ do begin
   i:=BranchSource^.i;
   Left:=nil;
   Right:=nil;
 end;
 CopyTree(BranchSource^.Left,BranchDest^.Left);
 CopyTree(BranchSource^.Right,BranchDest^.Right);
end;

//Выводим древо так же рекурсивно.
procedure ViewTree(Branch:PBranch);
begin
 if Branch=nil then exit;
 write(Branch^.i:5);
 ViewTree(Branch^.Left);
 ViewTree(Branch^.Right);
 writeln;
end;

begin
  CreateTree(Hitocu,3);
  ViewTree(Hitocu);
  writeln;
  CopyTree(Hitocu,Futacu);
  ViewTree(Futacu);
  readln;
end.
Вырубку древа сделаешь сам. Это тебе допзадание будет.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 26.11.2014, 19:39   #3
now2
Форумчанин
 
Регистрация: 12.03.2014
Сообщений: 217
Радость

Цитата:
Сообщение от Stilet Посмотреть сообщение
Код:
program Project1;
type
  //Наши веточки древа
  PBranch=^TBranch;
  TBranch=record
    Left,Right:PBranch;
    i:integer;
  end;
  //Деревья
  var Hitocu,Futacu:PBranch;

  //Создаем древо рекурсивно
  procedure CreateTree(var Branch:PBranch;Layers:integer);
  begin
   //Если достигнут нулевой слой, т.е. крона - выходим
   if Layers=0 then exit;
   //Иначе... еще по веточке
   New(Branch);
   with Branch^ do begin
     //Задаем им листик
     i:=Layers*10;
     Left:=nil;
     Right:=nil;
   end;
   //И к нему пару череночков, уменьшая номер слоя
   CreateTree(Branch^.Left,Layers-1);
   CreateTree(Branch^.Right,Layers-1);
  end;

//Скопируем древо
procedure CopyTree(var BranchSource,BranchDest:PBranch);
begin
 //Если достигнута вершина - выходим
 if BranchSource=nil then exit;
 //Иначе клонируем черенок за черенком
 New(BranchDest);
 with BranchDest^ do begin
   i:=BranchSource^.i;
   Left:=nil;
   Right:=nil;
 end;
 CopyTree(BranchSource^.Left,BranchDest^.Left);
 CopyTree(BranchSource^.Right,BranchDest^.Right);
end;

//Выводим древо так же рекурсивно.
procedure ViewTree(Branch:PBranch);
begin
 if Branch=nil then exit;
 write(Branch^.i:5);
 ViewTree(Branch^.Left);
 ViewTree(Branch^.Right);
 writeln;
end;

begin
  CreateTree(Hitocu,3);
  ViewTree(Hitocu);
  writeln;
  CopyTree(Hitocu,Futacu);
  ViewTree(Futacu);
  readln;
end.
Вырубку древа сделаешь сам. Это тебе допзадание будет.
сама

спасибо , но это не подходит программа должна быть меньше и с обращением во второй строке к модулю

Последний раз редактировалось Stilet; 26.11.2014 в 21:47.
now2 вне форума Ответить с цитированием
Старый 26.11.2014, 21:46   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
сама
Надо было ник соответствующий брать...
Цитата:
это не подходит
Соболезную. Значит рой методички, что там за модули и стандарты.
Или функции выноси в модуль, получится что-то вроде:
Код:
unit HappyTreeFriends;

interface
type
  //Наши веточки древа
  PBranch=^TBranch;
  TBranch=record
    Left,Right:PBranch;
    i:integer;
  end;

  procedure CreateTree(var Branch:PBranch;Layers:integer);
  procedure CopyTree(var BranchSource,BranchDest:PBranch);
  procedure ViewTree(Branch:PBranch);

implementation


  //Создаем древо рекурсивно
  procedure CreateTree(var Branch:PBranch;Layers:integer);
  begin
   //Если достигнут нулевой слой, т.е. крона - выходим
   if Layers=0 then exit;
   //Иначе... еще по веточке
   New(Branch);
   with Branch^ do begin
     //Задаем им листик
     i:=Layers*10;
     Left:=nil;
     Right:=nil;
   end;
   //И к нему пару череночков, уменьшая номер слоя
   CreateTree(Branch^.Left,Layers-1);
   CreateTree(Branch^.Right,Layers-1);
  end;

//Скопируем древо
procedure CopyTree(var BranchSource,BranchDest:PBranch);
begin
 //Если достигнута вершина - выходим
 if BranchSource=nil then exit;
 //Иначе клонируем черенок за черенком
 New(BranchDest);
 with BranchDest^ do begin
   i:=BranchSource^.i;
   Left:=nil;
   Right:=nil;
 end;
 CopyTree(BranchSource^.Left,BranchDest^.Left);
 CopyTree(BranchSource^.Right,BranchDest^.Right);
end;

//Выводим древо так же рекурсивно.
procedure ViewTree(Branch:PBranch);
begin
 if Branch=nil then exit;
 write(Branch^.i:5);
 ViewTree(Branch^.Left);
 ViewTree(Branch^.Right);
 writeln;
end;
И код:
Код:
uses HappyTreeFriends;
  //Деревья
  var Hitocu,Futacu:PBranch;

begin
 Тыдыщь.
end.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Очень нужна помощь c матрицами, макросами в Excel. Заранее благодарен(поверьте, очень-очень нужна помощь) Farridjan Помощь студентам 1 03.07.2009 12:24
Очень нужна помощь! Нужно найти ошибку в очень простой программе. Lex55555777 Помощь студентам 3 07.12.2008 20:32
Нужна помощь в Паскале. Очень-очень срочно. !!! Помощь студентам 2 09.02.2007 15:12