А вот необходимо прикрепить к этому прокрутку.
Я вот что сделал, но что-то в переменных запутался, подскажите плизз:
TYPE
ND=^NODE;
Node=record
INF1:integer;
INF2:string;
LEFT:ND;
RIGHT:ND;
end;
VAR
ROOT,P,Q:ND;
otvet:string;
ch:char;
F:integer;
procedure Shapka;
Begin
clrscr;
writeln('------------------------------------------------------------');
writeln('№':3,' * Табельный номер * Фамилия');
writeln('------------------------------------------------------------');
end;
procedure node_count(P:ND; VAR n_count:Integer); {обход дерева с подсчётом кол-ва узлов}
Begin
IF P<>NIL then
begin
IF (P^.LEFT<>NIL) or (P^.RIGHT<>NIL) then
inc(n_count);
IF (P^.LEFT=NIL) and (P^.RIGHT=NIL) then
inc(n_count);
node_count(P^.LEFT,n_count);
node_count(P^.RIGHT,n_count);
end;
End;
function node_count:integer; {получение количества узлов в дереве}
VAR
n_count:integer;
Begin
n_count:=0;
node_count(ROOT,n_count);
node_count:=n_count;
End;
procedure show(P:ND;VAR i:integer); {обход дерева через ЛОП}
Begin
IF P<>NIL then
begin
show(P^.LEFT,i);
IF P^.LEFT=NIL then
inc(i);
writeln(i:3,' * ',p^.INF1:10,' * ',p^.INF2:30);
IF P^.RIGHT=NIL then
inc(i);
show(P^.RIGHT,i);
end;
End;
Procedure vivodilka; {процедура по выводу с прокруткой, которая работает не корректно}
VAR
curr_poss,i,n:integer;
refresh:boolean;
Begin
curr_poss:=0;
refresh:=true;
i:=0;
repeat
if refresh then
begin
Shapka;
n:=0;
repeat
inc(n);
IF i = n+curr_poss then
begin
write(i+curr_poss:3);
show(ROOT,i);
end;
until (i > 10) or (P=NIL);
refresh:=false;
end;
case ord(readkey) of
80: if curr_poss+10 < node_count then
begin
inc(curr_poss,10);
refresh:=true;
end;
72: if curr_poss-10 >=0 then
begin
dec(curr_poss,10);
refresh:=true;
end;
13: break;
end;
until false;
End;