- •Модули для лабораторных работ.
- •Var I:byte;
- •Var I:Index;
- •Var I:byte;
- •Interface
- •V:BaseType;
- •Var TablError:byte;
- •Implementation
- •Var I:index;
- •Interface
- •Var tablerror:byte;
- •Implementation
- •Interface
- •Var TablError:byte;
- •Implementation
- •Var I:index;
- •Interface
- •Var TablError:byte;
- •Implementation
- •Var I:index;
- •Interface
- •Implementation
- •Var I:index;
- •Interface
- •Implementation
- •Interface
- •Implementation
- •Interface
- •Implementation
- •Interface
- •Implementation
- •Interface
- •Implementation
- •Interface
- •Implementation
- •Interface
- •Implementation
- •Interface
- •Implementation
- •Interface
- •Implementation
- •Interface
- •Implementation
- •Interface
- •Implementation
Interface
Const tablsize = 100; {размер таблицы}
tablok = 0; {успешное завершение операции}
tablover = 1; {таблица переполнена}
tablunder = 2; {таблица пуста}
tablelnotfound = 3; {элемент не найден}
Type Index = 0..TablSize;
BaseType = Word;
Element = record
k:Integer;
V:BaseType;
end;
Tabl = record
buf:array [Index] of Element;
uk:Index;
end;
Var TablError:byte;
Procedure InitTabl (var T:Tabl);{конструктор}
Function EmptyTabl (var T:Tabl):boolean;{таблица пуста?}
Function FullTabl (var T:Tabl):boolean;{таблица переполнена?}
Procedure PutTabl (var T:Tabl; El:Element);{включение элемента}
Function GetTabl (var T:Tabl; var El:Element; key:integer):boolean;{исключение элемента}
Function LineFind (var T:Tabl; key:integer; var El:Element; var n:Index):boolean; {линейный поиск}
Function FastLineFind (var T:Tabl; key:integer; var El:Element; var n:Index): boolean; {быстрый линейный поиск}
Function BinFind (var T:Tabl; key:integer; var El:Element; var n:Index):boolean; {бинарный поиск}
Implementation
Procedure InitTabl;
Var I:index;
Begin
T.uk:=0;
TablError:=2
End;
Function EmptyTabl;
Begin
if T.uk=0 then TablError:=tablunder;
EmptyTabl:=T.uk=0;
End;
Function FullTabl;
Begin
if T.uk=TablSize then TablError:=tablover;
FullTabl:=T.uk=tablsize;
End;
Procedure PutTabl;
Begin
if not FullTabl (T) then
begin
inc(T.uk);
T.buf[T.uk]:= El;
TablError:= tablok;
end
else TablError:= tablover;
End;
Function GetTabl;
var i:byte;
n:Index;
Begin
if not(EmptyTabl(T)) then
if LineFind(T,key,el,n) then
begin
el:=T.buf[n];
T.buf[n]:=T.buf[T.uk-1];
Dec(T.uk);
TablError:=TablOk;
end
else TablError:=tablelnotfound;
End;
Function LineFind;
var i:Index;
Begin
i:=0;
TablError:=TablElNotFound;
while (i<T.uk) and (TablError=TablElNotFound) do
begin
if T.buf[i].k=key then
begin
TablError:=TablOk;
el:=T.buf[i];
n:=i;
end;
Inc(i);
end;
LineFind:=TablError=TablOk;
End;
Function FastLineFind;
var i:byte;
f:boolean;
Begin
f:=false;
i:=0;
T.buf[T.uk+1].k:=key;
While not(f) do
begin
if T.buf[i].k=key then
begin
f:=true;
el:=T.buf[i];
n:=i;
end;
Inc(i);
end;
if n=T.uk+1 then TablError:=TablElNotFound
else TablError:=TablOk;
FastLineFind:=TablError=TablOk;
End;
Function BinFind;
var i,j,k:Index;
f:boolean;
Begin
i:=0;
j:=T.uk-1;
f:=false;
repeat
k:=(i+j) div 2;
if T.buf[k].k=key then
begin
f:=true;
el:=T.buf[i];
end;
if T.buf[k].k>key then i:=k+1
else j:=k-1;
until f or (i>j);
if f then TablError:=TablOk
else begin
n:=i;
TablError:=TablElNotFound;
end;
End;
End.
{---------------------------------------------------------------------------}
unit UTreeTab; {таблица на дереве}
