Модуль (unit) представляет собой программную единицу, текст которой компилируется отдельно. Текст модуля пишется в соответствии со структурой отличной от структуры программы на языке Pascal.
При использовании модулей, программный код записывается в нескольких программных файлах. Один программный файл представляет собой программный модуль. Другие программные файлы, представляют собой программный код, обеспечивающий обращение к процедурам, включенным в программный модуль.
Программный код модуля включает следующие части:
Во-первых, заголовок модуля, который записывается в соответствии со следующим синтаксисом:
Unit <имя модуля>;
Во-вторых, интерфейсная часть, которая начинается зарезервированным словом “Interface”. В интерфейсной секции помещаются объявления типов данных, переменных, процедур, функций, которые должны быть доступны для программного кода, использующего данный модуль.
В-третьих, исполнительную часть, которая начинается зарезервированным словом “Implementation”. В секцию “Implementation” включаются описания процедур и функций.
Для создания программного модуля в среде “Delphi” выбирается команда “New” из меню “File”. В окне “NewItem” на странице “New” выбирается пиктограмма “Unit”. При выполнении этой команды, обеспечивается автоматический переход в текстовый редактор Delphi. В текстовом редакторе автоматически генерируются следующие конструкции:
Во-первых, заголовок модуля;
Во-вторых, предложение “Interface”, определяющее начало интерфейсной секции;
В-третьих, предложение “Implementation”, определяющее начало исполнительной части;
В-четвертых, предложение “End.”, определяющее конец модуля.
После набора программного кода, модуль сохраняется при помощи команды “Save As”. При сохранении модуля выбирается тип сохраняемого файла “Delphi unit”.
Программный код, обеспечивающий обращение к модулю, может быть организован, как консольное предложение. В программный код консольного предложения в предложение добавляется конструкция, определяющая подключаемый модуль. Например:
Uses
SysUtils,
UnitSort in 'Unitsort.pas';
Пример. Организация сортировки заданного фрагмента массива в виде модуля.
unit UnitSort;
Interface
Type
TArray=Array[1..40] Of Integer;
Procedure SortMb(Var A:Tarray; N:Integer;
N1:Integer;N2:Integer);
Implementation
Procedure SortMb;
Var
I,J,W:Integer;
Begin
For I:= N1 To N2-1 Do
For J:= I+1 To N2 Do
If A[I]>A[J] Then
Begin
W:= A[I]; A[I]:=A[J]; A[J]:=W;
End;
End;
End.
Для вызова данной сортировки необходимо разработать программу, обеспечивающую вызов модуля. Программа имеет следующий вид:
Program PrjSort;
{$APPTYPE CONSOLE}
uses
SysUtils,
UnitSort in 'Unitsort.pas';
Var
A:TArray;
I,N,N1,N2: Integer;
Begin
Writeln ('Input N');
Readln (N);
Writeln ('Input Array');
For I:=1 To N Do
Read(A[I]);
Writeln ('Input N1'); Readln (N1);
Writeln ('Input N2'); Readln (N2);
SortMB(A,N,N1,N2);
For I:=1 To N Do
Writeln(A[I]);
Readln;
End.
Пример обработки документов с использованием внешнего программного модуля.
Имеется многострочный документ, содержащий учетную информацию об обработанном рабочем времени. Документ содержит следующие реквизиты:
Во-первых, наименование подразделения. Реквизит представлен в виде 30 символов;
Во-вторых, фамилия, имя и отчество сотрудника. Реквизит представлен в виде 40 символов;
В-третьих, число отработанных часов. Реквизит представлен в виде пяти цифр;
В-четвертых, число потерянных часов. Реквизит представлен в виде пяти цифр.
Требуется определить значение статистической характеристики "медиана" для реквизита "число отработанных часов". Медианой называется значение признака, приходящееся на середину упорядоченной совокупности. Если в совокупности четное число единиц, то медиана равна средней арифметической из двух средних значений вариантов.
Программный код организован в виде двух программных файлов.
Первый программный файл организован в виде модуля. Модуль содержит процедуру, обеспечивающую определения значения статистической характеристики медиана для совокупности значений, организованных в виде целочисленного массива.
Программный код первого программного файла имеет следующий вид:
Unit UnitMediana;
Interface
Type
TArray=Array[1..40] Of Integer;
Procedure Mediana(A:Tarray; N:Integer;
Var Rezult:Integer);
Implementation
Procedure Mediana;
Var
I,J,W,N1:Integer;
Begin
For I:= 1 To N-1 Do
For J:= I+1 To N Do
If A[I]>A[J] Then
Begin
W:= A[I]; A[I]:=A[J]; A[J]:=W;
End;
N1:= N div 2;
If N Mod 2 = 0 Then
Rezult:= (A[N1] + A[N1 + 1]) div 2
Else
Rezult:= A[N1 + 1];
End;
End.0
Программный код второго программного файла обеспечивает ввод информации, обращение к процедуре нахождения медианы и выдачу результата.
Program PrjMediana;
{$APPTYPE CONSOLE}
Uses
SysUtils,
UnitMediana in 'UnitMediana.pas';
Type
TYchet = Record
Podr: String [30];
Fio: String [40];
Otr: Integer;
Pot: Integer;
End;
TArrayYchet = Array [1..100] Of TYchet;
Var
Ychet: TArrayYchet;
A:TArray;
I,N,Med: Integer;
Begin
Writeln('Vvedite chislo zapisei');
Readln(N);
For I:= 1 To N Do
Begin
Writeln ('Naimenovanie podrazdelenija');
Readln(Ychet[I].Podr);
Writeln ('Familija,Imia,Otchestvo sotrydnika');
Readln(Ychet[I].Fio);
Writeln ('Chislo otrabotannix chasov');
Readln(Ychet[I].Otr);
Writeln ('Chislo poterjanix chasov');
Readln(Ychet[I].Pot);
End;
For I:= 1 To N Do
A[I]:= Ychet[I].Otr;
Mediana(A, N, Med);
Writeln ('Mediana ravna ',Med);
Readln;
End.
СПИСОК ЛИТЕРАТУРЫ И РЕСУРСЫ ИНТЕРНЕТ