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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.05.2012, 18:31   #1
Andrey(
Новичок
Джуниор
 
Регистрация: 18.04.2012
Сообщений: 1
По умолчанию Дерево (паскаль)

Всем привет! Помогите доделать задачу.
Задача:
Сформировать дерево по принципу:
1) вершина случайное x.
2) левое поддерево sin(x).
3) правое поддерево cos(x)
Дерево глубиной N (N вводит пользователь). В полученном дереве удалить все отрицательные вершины (если их нету, то вывести сообщение). Полученное и исходное дерево распечатать

Я сделал почти всё, осталось удалить отрицательные вершины. Как их можно удалить?(Надо переделать процедуру del под мои нужды)

Код:
Uses 
Crt;
type
tree=^elem;
elem=record;
key:real;
left,right:tree;
end;
var
p:tree;
NL:real;
z:integer;
procedure maketree(var p:tree; level:real);
var
   q:tree;
begin
if p=nil then
      begin
      new(p);
      p^.key:=2{random(10)};
      NL:=p^.key;
      writeln('root:',p^.key);
      p^.left:=nil;
      p^.right:=nil;
      maketree(p,0);
end else

    begin
     if level<>z then
      begin
       new(q);
       q^.key:=cos(p^.key);
       q^.left:=nil;
       q^.right:=nil;
       p^.left:=q;

       new(q);
       q^.key:=sin(p^.key);
       q^.left:=nil;
       q^.right:=nil;
       p^.right:=q;

       maketree(p^.left,level+1);
       maketree(p^.right,level+1);
        end;
    end;
end;

function find(root:tree; key:integer; var p, parent:tree):Boolean;
begin
   p:=root;
   while p<>nil do begin
      if key<p^.key then begin
         find:=true;
         exit;
      end;
      parent:=p;
      if key=p^.key then
         p := p ^. left 
      else p := p ^. right ; 
   end;
find:=false;
end;


procedure del ( var root:tree; key:integer );
var
   p:tree ;
   parent : tree ;
   y:tree ; 
function spusk(p:tree):tree;
var
   y:tree ;
   pred:tree; 
begin
   y:=p^.right;
   if y^.left=nil then y^.left:=p^.left 
   else 
   begin
      repeat
         pred:=y; y:=y^.left;
      until y^.left=nil;
      y^.left:=p^.left; 
      pred^.left:=y^.right; 
      y^.right:=p^.right; 
   end;
   spusk:=y;
end;
begin
   if not find(root, key, p, parent) then 
   begin writeln('Takogo el-ta net'); exit; end;
   if p^.left=nil then y:=p^.right 
   else
      if p^.right=nil then y:=p^.left 
      else y:=spusk(p); 
   if p=root then root:=y 
   else 
      if key<parent^.key then
         parent^.left:=y
      else parent^.right:=y;
   dispose(p); 
end;

procedure PrintTree (p:Tree;level:integer);
var i:integer;
begin
 if p<>nil then
   begin
     PrintTree(p^.right,level+1);
    for i:=1 to level do Write(' ');
    write(' ',p^.key,' '); writeLn;
    PrintTree(p^.left,level+1);
   end;
end;

begin
writeln('Vvedite glubinu:');
readln(z);
p:=nil;
MakeTree(p,NL);
PrintTree(p,0);
readln;
del(p,0);
PrintTree(p,0);
end.
Много чего взял с http://pascal.proweb.kz/index.php?page=253

Последний раз редактировалось Andrey(; 02.05.2012 в 19:09.
Andrey( вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
бинарное дерево(паскаль) tim47 Помощь студентам 0 15.04.2012 17:43
2-3 дерево pilizz Фриланс 4 06.11.2011 10:56
дерево energywav Помощь студентам 0 31.05.2010 20:22
[Паскаль] Преобразование формулы в дерево Karabas Помощь студентам 5 18.04.2009 22:31