- •Модули для лабораторных работ.
- •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
Implementation
Var FifoError:0..2;
Procedure InitFifo;
Begin
f.Uk1:=0;
f.n:=0;
f.Uk2:=0;
FifoError:=fifook
End;
Function EmptyFifo;
Begin
EmptyFifo:=f.n=0
End;
Function FullFifo;
Begin
FullFifo:=f.n=fifosize
End;
Procedure PutFifo;
Begin
if not FullFifo(f) then
begin
inc(f.n);
inc(f.Uk2);
f.buf[f.Uk2]:=El;
f.Uk2:=f.Uk2 mod fifosize;
FifoError:=fifook
end
else FifoError:=fifofull
End;
Procedure GetFifo;
Begin
if not EmptyFifo(f) then
begin
dec(f.n);
el:=f.buf[f.Uk1];
inc(f.Uk1);
f.Uk1:=f.Uk1 mod fifosize;
FifoError:=fifook
end
else FifoError:=fifoempty
End;
Function ReadFifo;
Begin
ReadFifo:=f.buf[f.Uk1]
End;
End.
{------------------------------------------------------------------------------}
Unit UFifoL;{очередь на списке}
Interface
Const fifook=0;{успешное завершение операции}
fifoempty=2;{очередь пуста}
Type BaseType=byte;
ElPtr=^Element;
Fifo=record
PStart,PEnd:ElPtr
end;
Element=record
Data:BaseType;
Link:ElPtr
end;
Var error:byte;
Procedure InitFifo (var f:Fifo);{конструктор}
Function EmptyFifo (var f:Fifo):boolean;{очередь пуста?}
Function FullFifo (var f:Fifo):boolean;{очередь полна?}
Procedure GetFifo (var f:Fifo; var el:BaseType);{удаление элемента из очереди}
Procedure PutFifo (var f:Fifo; el:BaseType);{помещение элемента в очередь}
Function ReadFifo(f:Fifo;el:BaseType):BaseType;{чтение первого элемента из очереди}
Implementation
Procedure InitFifo;
Begin
New(f.PStart);
f.PEnd:=f.PStart;
f.PStart^.Data:=0;
f.PStart^.Link:=nil;
error:=fifook
End;
Function EmptyFifo;
Begin
EmptyFifo:=(f.PStart = f.PEnd);
End;
Function FullFifo;
Begin
FullFifo:=MaxAvail<SizeOf(Element);
error:=fifook
End;
Procedure PutFifo;
Begin
if not FullFifo(f) then
with f do
begin
New(PEnd^.link);
PEnd:=PEnd^.link;
PEnd^.Data:=el;
PEnd^.link:=nil;
error:=fifook
end
End;
Procedure GetFifo;
var Buf:ElPtr;
Begin
if not EmptyFifo(f) then
begin
Buf:=f.PStart;
El:=f.PStart^.Data;
f.PStart:=f.PStart^.link;
Dispose(Buf);
error:=fifook
end
else error:=fifoempty
End;
Function ReadFifo;
var Buf:ElPtr;
Begin
if not EmptyFifo(f) then
begin
Buf:=f.PStart;
ReadFifo:=f.PStart^.Data;
error:=fifook
end
else error:=fifoempty
End;
End.
{------------------------------------------------------------------------------}
unit UStackM;{стек на массиве}
Interface
Const stacksize = 10;{размер стека}
stackok = 0;{успешное завершение операции}
stackover = 1;{стек переполнен}
stackunder = 2;{стек пуст}
Var StackError: byte;
Type Index = 0..StackSize;
BaseType = word;
Stack = record
buf: array [Index] of BaseType;
uk: Index;{указатель на верхний элемент стека}
end;
Procedure InitStack(var S:Stack);{конструктор}
Function EmptyStack(S:Stack):boolean;{стек пуст?}
Function FullStack(S:Stack):boolean;{стек полон?}
Procedure PutStack(var S:Stack;El:BaseType);{помещение элемента в стек}
Procedure GetStack(var S:Stack;var El:BaseType);{удаление элемента из стека}
