Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- program drzewo;
- uses crt;
- type
- PNode = ^Node;
- Node = record
- name : string;
- mother : PNode;
- father : PNode;
- end;
- var
- me : PNode; // Korzeń drzewa
- depth : integer; // Ilość zagnieżdżeń
- depthFound : integer; // Poziom, na którym znaleziono (0 dla korzenia)
- i : integer; // Iterator
- cmd : string; // Polecenie
- reversed : boolean; // Zmienna pomocnicza przy określaniu relacji
- tempText : string;
- tempText2 : string;
- tempNode : PNode;
- function find(name : string; node : PNode) : PNode;
- var tempNode : PNode;
- begin
- if node^.name = name then
- begin
- depthFound := depth;
- find := node;
- end
- else
- begin
- tempNode := node^.mother;
- if tempNode <> nil then
- begin
- inc(depth);
- tempNode := find(name, tempNode);
- dec(depth);
- end;
- if tempNode = nil then // Nie znalazł od strony matki
- begin
- tempNode := node^.father;
- if tempNode <> nil then
- begin
- inc(depth);
- tempNode := find(name, tempNode);
- dec(depth);
- end;
- end;
- depthFound := depth;
- find := tempNode; // Jak nie znalazł, zwróci nil.
- end;
- end;
- procedure printNode(node : PNode);
- begin
- writeln(node^.name);
- inc(depth);
- if Node^.mother <> nil then
- begin
- for i := 1 to depth do
- begin
- write(' ');
- end;
- write('M: ');
- printNode(Node^.mother)
- end;
- if Node^.father <> nil then
- begin
- for i := 1 to depth do
- begin
- write(' ');
- end;
- write('O: ');
- printNode(Node^.father);
- end;
- dec(depth);
- end;
- begin
- // Ustalenie zmiennych
- depth := 0;
- // Utworzenie korzenia
- new(me);
- writeln('Jak się nazywasz: ');
- readln(me^.name);
- repeat
- begin
- // Wypisanie drzewa
- clrscr;
- writeln('Drzewo genealogiczne: ');
- printNode(me);
- writeln;
- writeln('Polecenie: ');
- write('> ');
- readln(cmd);
- if cmd = 'add' then
- begin
- write('Podaj imię i nazwisko osoby już dodanej: ');
- readln(tempText);
- writeln('done1');
- tempNode := find(tempText, me);
- writeln('done2');
- if tempNode <> nil then
- begin
- writeln('Matka czy ojciec? (m/o)');
- readln(tempText);
- if tempText = 'm' then
- begin
- write('Podaj imię i nazwisko nowej osoby: ');
- readln(tempText);
- new(tempNode^.mother);
- tempNode^.mother^.name := tempText;
- end
- else
- begin
- write('Podaj imię i nazwisko nowej osoby: ');
- readln(tempText);
- new(tempNode^.father);
- tempNode^.father^.name := tempText;
- end;
- end
- else
- begin
- writeln('Nie ma takiej osoby!');
- readln;
- end;
- end;
- if cmd = 'rel' then
- begin
- writeln('Kto: ');
- readln(tempText);
- writeln('Dla kogo: ');
- readln(tempText2);
- tempNode := find(tempText2, me);
- if find(tempText1, tempNode) <> nil then
- begin
- end
- else
- begin
- tempNode := find(tempText1, me);
- end;
- end;
- end
- until cmd = 'quit';
- end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement