8. Модули
55
*
не нужно и не надо декларировать снова объекты, описанные в описательной
части. По правилам видимости их видно как глобальные идентификаторы;
*
для всех процедур и функций, описанных в описательной части, необходимо
задать реализацию. Описания в interface части рассматриваются
компилятором как опережающие (forward) описания;
*
все глобальные переменные модуля, описанные в обеих частях (interface и
implementation), существуют все время с начала до конца выполнения
программы (или модуля), использующей этот модуль;
*
тело модуля (операторы, заключенные в BEGIN и END, implementation части
модуля) выполняется до передачи управления первому оператору
использующего его модуля и выступает в роли инициализирующей части;
*
если в теле модуля будет использована метка EXIT, в процессе
инициализации модуля выполняются только операторы, которые
предшествуют этой метке. По окончанию выполнения программы (модуля),
использующей этот модуль, управление передается помеченному этой
меткой оператору. Этим способом можно предусмотреть выполнение
необходимых действий для завершения работы этого модуля (закрытие
файлов, очистка экрана и т.д.).
implementation unit STACK;
const StackSize = 100;
type StackIndex = 0..StackSize;
var index: StackIndex;
IsFull, IsEmpty: boolean;
StackArray: array [StackIndex] of integer;
procedure push(x: integer);
begin
if not IsFull then begin
StackArray[index]:= x;
inc(index);
end { if };
IsFull:= StackSize <= index;
IsEmpty:= false;
end { push };
function pull: integer;
begin
if not IsEmpty then begin
dec(index);
pull:= StackArray[index];
end { if };
IsEmpty:= index = 0;
IsFull:= false;
end { pull };
function full: boolean;
begin
return(IsFull);
end { full };
function empty: boolean;
begin
<<  <  GO  >  >>

Вернуться к началу сайта