Секция реализации (implementation).

В этой секции размещаются тексты процедур и функций, объявленных в интерфейсной секции, а также здесь можно объявлять локальные для модуля объекты – вспомогательные типы, константы, переменные и подпрограммы

При записи подпрограмм заголовки процедур и функций можно указывать без описания списка формальных параметров. Но если заголовок подпрограммы приводится в полном виде (со списком формальных параметров) он должен совпадать с заголовком, объявленным в интерфейсной секции. Запись текста подпрограммы без указания списка формальных параметров является плохим стилем программирования – использовать такой способ записи в серьезных программах не рекомендуется. Указание перечня формальных параметров непосредственно в заголовке подпрограммы облегчает чтение кода и понимание алгоритма.

Инициализирующая секция предназначена для размещения операторов, которые выполняются до передачи управления основной программе и обычно используются для подготовки ее работы (например, инициализация переменных, открытие нужных файлов и т.п.)

Завершающая секция предназначена для указания операторов, которые выполняются после завершения работы основной программы (освобождение ресурсов, закрытие файлов). Если эти две секции пустые, то зарезервированные слова initialization и finalization не указываются.

Пример. Запишем модуль в котором:

n определяется константа МУ = 900;

n реализуется процедура (имя PV) перестановки двух переменных Р1 и Р2;

n реализуется функция (имя Мах) определения максимального значения из двух переменных Р3 и Р4.

n

Unit Prs;

Interface

Const My = 900;

Procedure Pv( Var P1, P2 : Integer);

Function Max (P3, P4 : Extended) : Extended;

Implementation

Procedure Pv( Var P1, P2 : Integer);

Var S : Integer;

Begin

S := P1 ; P1 : = P2 ; P2 : = S

End ; {конец процедуры PV}

Function Max (P3, P4 : Extended) : Extended;

Begin

If P3 >P4 Then Max : = P3

Else Max : = P4

End ; {конец функции Max}

END .

В процедуре Pv используется внутренняя переменная для запоминания значения переменной P1.

Пример программы использующей модуль PRS. Пусть в программе РХ надо поменять местами переменные К и М целого типа и вычислить переменную У как сумму переменной Z и максимального значения из переменных А и В. Фрагмент такой программы можно записать так

 

Program MOD;

Uses PRS ;

. . . . . . .

Var Y , A , B , Z : Real ;

K , M : Integer ;

. . . . . . .

Begin

. . . . . .

PV ( K , M ) ;

Y : = Z + MAX ( A , B ) ;

. . . . .

Вопрос ? Что будет если в модуле и программе определяются переменные с одинаковыми именами?

Правило. Если в модуле и программе, использующей этот модуль, объявляются одинаковые имена (переменные, константы, подпрограммы), то при использовании в тексте программы действует последнее объявление, то есть объявление в программе. Чтобы можно было использовать подобные имена из модуля необходимо записывать составное имя в виде

имя модуля . имя переменной

Пример.

Program USMOD ;

Uses PRS ;

Const My = 200 ;

Var Tk , Mz : Integer ;

Begin

. . . . . . .

Tk : = My + 25 ; {Tk = 225}

Mz : = Prs . My + 25 ; { Mz = 115 }

 

4.14. Типизированные константы

 

В Delphi (и в Турбо Паскале) можно использовать типизированные константы. В отличие от нетипизированных констант, объявляемых в разделе CONST, типизированные константы можно изменять в процессе выполнения программы. Фактически они представляют собой переменные, которые получают начальные значения до начала выполнения программы. В процессе выполнения программы им можно присваивать новые значения также как и обычным переменным соответствующего типа.

Замечание. Изменять значения типизированных констант можно во всех версиях Delphi, но в версиях 6 и 7 надо установить флажок Assignable typed constants на вкладке Project>options>compiler.

Типизированная константа приобретает указанное в ее объявлении значение только один раз – до начала выполнения программы. При повторном входе в блок, в котором она объявлена, инициализация не производится и она сохраняет то значение, которое имела к моменту выхода из данного блока.

Типизированные константы объявляются в разделе Const. Форма объявления имеет вид

<идентификатор> : < тип> = <значение>

Здесь <идентификатор> - имя константы; < тип> -тип константы; <значение> - значение константы.

Пример. X : Extended = 1.25;

Max : Integer = 50;

Sm : char = 'Y' ;

St : String = '*****';

Правила. Нельзя использовать типизированные константы в качестве границ диапазона. Нельзя указывать в левой части список идентификаторов.

 

Следующие записи является ошибочными

Ms : Array [0 .. Max] of Extended;

M, N, J : Integer = 1;

При объявлении констант массивов список начальных значений элементов массива заключается в круглые скобки. Разделителем значений в скобках является символ "запятая".

Пример. Const

Msa : Array [1 . . 4 ] Of Integer = (0, 1, 2, 3);

При объявлении многомерных констант массивов самый правый индекс изменяется быстрее всего. Множество констант, соответствующих каждому измерению, заключается в дополнительные круглые скобки и отделяется от соседнего множества запятыми.

Пример.

Const

Msb : Array [ 1 .. 3, 1 .. 4 ] of Integer =

((1, 2, 3, 4),

(5, 6, 7, 8),

(9, 10, 11, 12));

Нетрудно заметить, что набор значений для двумерного массива располагается по строкам.