Advertisement
niepok

drzewo

Jan 25th, 2015
174
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 2.96 KB | None | 0 0
  1. program drzewo;
  2. uses crt;
  3.  
  4. type
  5.  
  6. PNode = ^Node;
  7. Node = record
  8.     name : string;
  9.     mother : PNode;
  10.     father : PNode;
  11. end;
  12.  
  13. var
  14. me : PNode;  // Korzeń drzewa
  15. depth : integer;  // Ilość zagnieżdżeń
  16. depthFound : integer;  // Poziom, na którym znaleziono (0 dla korzenia)
  17. i : integer;  // Iterator
  18. cmd : string;  // Polecenie
  19. reversed : boolean;  // Zmienna pomocnicza przy określaniu relacji
  20.  
  21. tempText : string;
  22. tempText2 : string;
  23. tempNode : PNode;
  24.  
  25. function find(name : string; node : PNode) : PNode;
  26.  
  27. var tempNode : PNode;
  28.  
  29. begin
  30.     if node^.name = name then
  31.     begin
  32.         depthFound := depth;
  33.         find := node;
  34.     end
  35.     else
  36.     begin
  37.         tempNode := node^.mother;
  38.         if tempNode <> nil then
  39.         begin
  40.             inc(depth);
  41.             tempNode := find(name, tempNode);
  42.             dec(depth);
  43.         end;
  44.        
  45.         if tempNode = nil then  // Nie znalazł od strony matki
  46.         begin
  47.             tempNode := node^.father;
  48.             if tempNode <> nil then
  49.             begin
  50.                 inc(depth);
  51.                 tempNode := find(name, tempNode);
  52.                 dec(depth);
  53.             end;
  54.         end;
  55.        
  56.         depthFound := depth;
  57.         find := tempNode;  // Jak nie znalazł, zwróci nil.
  58.     end;
  59. end;
  60.  
  61. procedure printNode(node : PNode);
  62. begin
  63.     writeln(node^.name);
  64.    
  65.     inc(depth);
  66.    
  67.     if Node^.mother <> nil then
  68.     begin
  69.         for i := 1 to depth do
  70.         begin
  71.             write('  ');
  72.         end;
  73.         write('M: ');
  74.         printNode(Node^.mother)
  75.     end;
  76.    
  77.     if Node^.father <> nil then
  78.     begin
  79.         for i := 1 to depth do
  80.         begin
  81.             write('  ');
  82.         end;
  83.         write('O: ');
  84.         printNode(Node^.father);
  85.     end;
  86.    
  87.     dec(depth);
  88. end;
  89.  
  90. begin
  91.     // Ustalenie zmiennych
  92.     depth := 0;
  93.    
  94.     // Utworzenie korzenia
  95.     new(me);
  96.    
  97.     writeln('Jak się nazywasz: ');
  98.     readln(me^.name);
  99.    
  100.     repeat
  101.     begin
  102.         // Wypisanie drzewa
  103.         clrscr;
  104.         writeln('Drzewo genealogiczne: ');
  105.         printNode(me);
  106.        
  107.         writeln;
  108.         writeln('Polecenie: ');
  109.         write('> ');
  110.         readln(cmd);
  111.        
  112.         if cmd = 'add' then
  113.         begin
  114.             write('Podaj imię i nazwisko osoby już dodanej: ');
  115.             readln(tempText);
  116.             writeln('done1');
  117.             tempNode := find(tempText, me);
  118.             writeln('done2');
  119.             if tempNode <> nil then
  120.             begin
  121.                 writeln('Matka czy ojciec? (m/o)');
  122.                 readln(tempText);
  123.                 if tempText = 'm' then
  124.                 begin
  125.                     write('Podaj imię i nazwisko nowej osoby: ');
  126.                     readln(tempText);
  127.                    
  128.                     new(tempNode^.mother);
  129.                     tempNode^.mother^.name := tempText;
  130.                 end
  131.                 else
  132.                 begin
  133.                     write('Podaj imię i nazwisko nowej osoby: ');
  134.                     readln(tempText);
  135.                    
  136.                     new(tempNode^.father);
  137.                     tempNode^.father^.name := tempText;
  138.                 end;
  139.             end
  140.             else
  141.             begin
  142.                 writeln('Nie ma takiej osoby!');
  143.                 readln;
  144.             end;
  145.         end;
  146.        
  147.         if cmd = 'rel' then
  148.         begin
  149.             writeln('Kto: ');
  150.             readln(tempText);
  151.             writeln('Dla kogo: ');
  152.             readln(tempText2);
  153.            
  154.             tempNode := find(tempText2, me);
  155.             if find(tempText1, tempNode) <> nil then
  156.             begin
  157.            
  158.             end
  159.             else
  160.             begin
  161.                 tempNode := find(tempText1, me);
  162.             end;
  163.            
  164.         end;
  165.        
  166.        
  167.     end
  168.     until cmd = 'quit';
  169. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement