program TreeProcess; Uses Crt; Type rabotnik=record number:integer; FIO:string[15]; godroj:integer; pol:char; cem:string[15]; koldet:integer; oklad:integer; end; TreePtr=^Tree; Tree=record data:rabotnik; left,right:TreePtr; end; rab=file of rabotnik; Var Top,Root:TreePtr; r,Node,E:rabotnik; n,i,Otstup:Integer; f:rab; key:char; Function AddTree(Var Top:TreePtr; Newnode:rabotnik):TreePtr; Begin If Top=Nil then begin New(Top); Top^.data:=Newnode; Top^.left:=nil; Top^.right:=nil; end else If Top^.data.FIO>Newnode.FIO then Top^.left:=AddTree(Top^.left,Newnode) else Top^.right:=AddTree(Top^.right,Newnode); AddTree:=Top End; Procedure OrgTree; Var R: Rabotnik; Begin writeln('Tree Organization'); readln; reset(f); Top := Nil; while not eof(f) do begin read(f,r); Top := AddTree(Top, r); end; (* Top := nil; repeat writeln('element >> '); Write('FIO '); Readln(R.FIO); if R.fio <> '' then begin Write('Year '); Readln(R.godroj); Write('Gender '); Readln(R.pol); Write('Family '); Readln(R.cem); Write('Childr '); Readln(R.koldet); Write('Salary '); Readln(R.oklad); Top := AddTree(Top, R); end; until R.fio = ''; *) End; Procedure Prosmotr(Top:TreePtr); Begin if Top<>Nil then begin Prosmotr(Top^.left); with Top^.data do writeln(number:4,' ',FIO:15,' ',godroj:6,' ',pol:3,' ',cem:15,' ', koldet:7,' ',oklad:5); i:=i+1; Prosmotr(Top^.right); end; End; Procedure Otobr(Top:TreePtr;Otstup:Integer); Begin If Top<>Nil then begin Otstup:=Otstup+3; Otobr(Top^.right,Otstup); writeln(' ':Otstup,Top^.data.FIO); Otobr(Top^.left,Otstup); end; End; Procedure Count_E(Root:TreePtr;Var n:Integer;E:rabotnik); Begin If Root<>Nil then begin With Root^.data do If (FIO=E.FIO) and (pol=E.pol) and (cem=E.cem) and (koldet=E.koldet) and (oklad=E.oklad) then Inc(n); Count_E(Root^.left,n,E); Count_E(Root^.right,n,E); end; End; Begin Assign(f,'c:\derevo.dat'); repeat ClrScr; writeln('1-Organize Tree'); writeln('2-Tree View'); writeln('3-Counter'); writeln('4-Exit'); writeln; writeln('Your choice: '); key:=readKey; case key of '1':OrgTree; '2':Begin writeln('Viewing the tree ...'); writeln; i:=0; Prosmotr(Top); Otobr(Top,1); readln; end; '3':Begin writeln('element >> '); Write('FIO '); Readln(E.FIO); Write('Year '); Readln(E.godroj); Write('Gender '); Readln(E.pol); Write('Family '); Readln(E.cem); Write('Childr '); Readln(E.koldet); Write('Salary '); Readln(E.oklad); Count_E(top,n,E); writeln('E counter = ', n); readln; end; end until key='4'; end.