Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [Pascal->Delphi] Обход дерева


Автор: zarogon 17.10.2006, 12:56
Всем доброго времени суток. помогите пожалуйста переделать прогу для обхода дерева  с паскаля на делфи. Вот исходный код на паскале:
Код

Program DemidenkoS;
Uses
  Crt, Graph;
Const
  Arr : array [1..6] of integer=(160,80,40,20,10,5);
  Arr1 : array [1..6] of integer=(120,80,70,60,50,40);
Type
  ss=^sp;
  sp=record
       elem:byte;
       Next : array[1..2] of ss;
  end;
Var
  a, b, c, d : longint;
  s : string;
  grDriver : integer;
  grMode : integer;
  a1, b1 : real;
  x, Some, Max, Min : ss;
Procedure Zap(y : ss; n : integer);
Var
  aa,bb:integer;
Begin
  y^.elem:=random(99)+1;
  bb:=random(3);
  if n<1
    then
      bb:=2;
        if n<a
          then
            for aa :=1 to bb do
              begin
                new(y^.next[aa]);
                y^.next[aa]^.next[1]:=nil;
                y^.next[aa]^.next[2]:=nil;
                zap(y^.next[aa],n+1);
              end;
End;
Procedure Strel(x1, y1 : integer; k : Real);
Var
  aa : Real;
Begin
  aa:=arctan(k);
  if k>0
    then
      begin
        line(x1,y1,x1+round(10*cos(aa+pi/18)), y1-round(10*sin(aa+pi/18)));
        line(x1,y1,x1+round(10*cos(aa-pi/18)), y1-round(10*sin(aa-pi/18)));
        line(x1+round(10*cos(aa+pi/18)),y1- round(10*sin(aa+pi/18)),x1+ round(10*cos(aa-pi/18)),y1- round(10*sin(aa-pi/18)));
      end
    else
      begin
        aa:=-aa;
        line(x1,y1,x1-round(10*cos(aa+pi/18)), y1-round(10*sin(aa+pi/18)));
        line(x1,y1,x1-round(10*cos(aa-pi/18)), y1-round(10*sin(aa-pi/18)));
        line(x1-round(10*cos(aa+pi/18)),y1- round(10*sin(aa+pi/18)),x1- round(10*cos(aa-pi/18)),y1- round(10*sin(aa-pi/18)));
      end
end;
Procedure Wiv(y : ss; n, x1, y1 : integer);
Var
  spi : ss;
Begin
  SetColor(n+1);
  Circle(x1,y1,10);
  Str(y^.elem, s);
  if length(s)=2
    then
      OutTextXY(x1-6, y1-2, s)
    else
      OutTextXY(x1-3, y1-2, s);
        if n<a
          then
            begin
              if y^.next[1]<>nil
                then
                  begin
                    SetColor(n+1);
                    Line(x1,y1+10,x1-(arr[n] div 2),y1+((arr1[n]-20) div 2)+10);
                    SetColor(n+2);
                    Line(x1-(arr[n] div 2),y1+((arr1[n]-20) div 2)+10,x1-arr[n],y1+arr1[n]-10);
                    Strel(x1-arr[n],y1+arr1[n]-10, (arr1[n]-20)/arr[n]);
                    Wiv(y^.next[1],n+1,x1-arr[n],y1+ arr1[n]);
                  end;
              if y^.next[2] <> nil
                then
                  begin
                    SetColor(n+1);
                    Line(x1,y1+10,x1+arr[n],y1+arr1[n]-10);
                    SetColor(n+2);
                    Line(x1+(arr[n] div 2),y1+((arr1[n]-20) div 2)+10,x1+arr[n],y1+arr1[n]-10);
                    Strel(x1+arr[n],y1+arr1[n]-10,- (arr1[n]-20)/arr[n]);
                    Wiv(y^.next[2],n+1,x1+arr[n],y1+ arr1[n]);
                  end;
           end;
end;
Begin
  ClrScr;
  Randomize;
  Repeat
  new(x);
  a:=6;
  x^.next[1]:=Nil;
  x^.next[2]:=Nil;
  Zap(x,0);
  Max:=x;
  Min:=x;
  writeln;
  grDriver := Detect;
  InitGraph(grDriver, grMode,'');
  SetFillStyle(solidfill,15);
  SetColor(15);
  Wiv(x,1,320,50);
  Delay(50000);
  until KeyPressed;
End.

Автор: Hidrag 18.10.2006, 17:00
могу попробывать, но только в выходные с выводом графики на форму....

Автор: Бутерброд 19.10.2006, 12:59
Zarogon, если использовать компонент TTreeView, то всё становится просто как день. 

Автор: zarogon 20.10.2006, 11:58
Цитата(Бутерброд @ 19.10.2006,  12:59)
Zarogon, если использовать компонент TTreeView, то всё становится просто как день.

Напиши пример плиз  smile 

Автор: brodaga163 14.6.2008, 13:34
ребята, пожалуйста помогите сделать один пункт в создании дерева...надо  написать процедуру удаления всего под деревом- если это лист-удалить лист, уесли целая ветка-удалить целиком всю 
 плиз отправьте что получилось на [email protected] буду очень признателен 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)