Ремонт принтеров, сканнеров, факсов и остальной офисной техники


назад Оглавление вперед




[20]

ции и т. д. Модуль определяется как программа, начинающаяся со служебного слова "Unit" и включающая в себя интерфейсную, исполняемую и инициирующую части.

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

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

Инициирующая часть модуля начинается со служебного слова "Begin" и содержит блок операторов, выполняемых при подключении модуля к основной программе. Инициирующая часть вместе со словом "Begin" может отсутствовать или быть пустой. Заканчивается модуль служебным словом "End. " с точкой.

Содержимое исполняемой и инициирующей частей не доступно основной программе, связь модуля с основной программой осуществляется через интерфейсную часть модуля.

Структура модуля имеет вид:

Unit Name M; { Name M - имя модуля } {-----------------------------------------------------------------}

Interface{ Интерфейсная часть модуля}

{ ------------------------------------раздел описания глобальных имен}

Type MM= array[1..10, 1..10] of real;{ описание типа}

Var Max F, Min F: real;{описание глобальных переменных}

{----------------------------------------------------------------- }

Procedure Name P(p1: real; p2: MM); { описание заголовков процедуры} Function Name f(p3, p4: real): real;{и функции}

{----------------------------------------------------------------- }

Implementation{ Исполняемая часть модуля}

{ --------------------------------------раздел описания локальных имен}

Const C = Подключен модуль Name M;{ задание локальной константы}

Procedure Name P;{Полное описание процедуры}

{ Раздел описания процедуры}

Begin { Раздел выполнения процедуры}End;

Function Name f: real;{Полное описание функции}

{ Раздел описания функции}

Begin { Раздел выполнения функции}End;

{ ---------------------------------------------------------------- }

BEGIN{ Инициирующая часть модуля}

Writeln(C); { операторы модуля}

Отметим, что в интерфейсной части модуля запрещается делать опережающее описание процедур. Запрещается также рекурсия модулей.

Модуль записывается в файл с именем модуля, например, Name M. pas. Затем файл компилируется, при этом получается файл с расширением ". tpu", например, Name M. tpu, который автоматически записывается в каталог, указанный в опции Options, Directories, EXE & TPU, иначе - в текущий каталог. При запуске программы, использующей модуль,


файл с расширением ". tpu" ищется в каталоге, указанном в опции Options, Directories, EXE & TPU или Unit Directories, либо в текущем каталоге.

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

Program Pr 1;

Uses Name M1, Name M2;

Если в основной программе имя идентификатора совпадает с именем, объявленным в интерфейсной части подключенного модуля, то используются значения, присвоенные идентификатору в программе. Если одинаковые имена встречаются в интерфейсной части подключенных модулей (например в Name M1 и Name M2), то используются значения, присвоенные идентификатору в последнем описанном модуле, т. е. в Name M2.

Приведем пример разработки и подключения модуля. В модуле опишем процедуры работы с матрицами.

Unit MATR 1;

{-----------------------------------------------------------------}

Interface

{-----------------------------------------------------------------}

Type M = array[1..10, 1..10] of real; M1 = array[1..10] of real;

Procedure MAT 1(a:M; var b:M; n: word); Procedure MAT 2(a:M; var b:M1; n: word);

{-----------------------------------------------------------------}

Implementation

{-----------------------------------------------------------------}

Procedure MAT 1;{создание матрицы "B", транспонированной к "A"}

var i, j: word;

begin for i:=1 to N do for j:=1 to N do b[i,j]:=a[j,i] end;

{-----------------------------------------------------------------}

Procedure MAT 2;{расчет квадратов диагональных элементов}

var i, j: word;

begin for i:=1 to N do b[i]:=a[i,i]*a[i,i] end;

{-----------------------------------------------------------------}

В основной программе PR 1 подключается модуль MATR 1 и используются процедуры

MAT 1 и MAT 2.

Program PR 1; Uses MATR 1;

Type MM = M; MM1 = M1;


Var a1,a2,a3: MM; b1,b2: MM1;

i,j,n: word;

Begin Writeln(введите размерность матрицы N=); Readln(n);

Randomize;

for i:=1 to n do for j:=1 to n do a1[i,j]:=random(20)+1;

MAT 1(a1, a2, n); MAT 1(a2, a3, n); MAT 2(a1, b1, n); MAT 2(a2, b2, n) end.

В результате двойного транспонирования исходной матрицы "a1" (из "a1" в "a2", из "a2" в "a3") получается матрица "a3" тождественная "a1" .

Матрицы "b1" и "b2" содержат квадраты диагональных элементов матриц "a1" и "a2". Типы массивов фактических параметров должны соответствовать типам массивов формальных параметров, описанных в модуле MATR 1. Можно использовать имена типов, заданные в интерфейсной части модуля или задавать новые имена типов.

Практическое задание N 1. 33

1.Написать и отладить программы с использованием модуля, содержащего процедуры расчета элементов линейных массивов " В", являющихся:

1 1.суммой элементов в столбцах матрицы "A" (NxM),

1 2.суммой элементов в строках матрицы "A" (NxM),

1 3.наибольшими элементами в строках матрицы "A" (NxM),

1 4.наименьшими элементами в строках матрицы "A" (NxM).

1 5.наибольшими элементами в столбцах матрицы "A" (NxM),

1 6.наименьшими элементами в столбцах матрицы "A" (NxM). N=30, M=10.

Значения элементов матрицы "A" определяются в основной программе функцией Random(10), N=15, M=6. Программа выводит на экран значения элементов массивов "A" и

"В".

2.Составить модуль, содержащий процедуры или функции для расчета: 2 1. скалярного произведения двух векторов "A" и "B" длиной "N", т. е.

С= A * B = a1*b1 + a2*b2 + ... + aN*bN, где N<=100. 2 2. суммирования двух матриц "A" и "B" размером (МxN), N<=30, M<=30, т. е.

С= A + B , где c11= a11+ b11; b12 = a12+ b12; и т. д. cMN = aMN+ bMN. 2 3. умножения двух матриц "A" (№fxN) и "B" (NxK) , N<=30, K <=30, M<=30, т. е. С= A * B , где cij= ai1* b1j+ ai2* b2j + ... + aiN* bNj ; и т. д. Элемент с индексом "i, j" новой матрицы "С" (МхК) получается как сумма произведений элементов i -ой строки матрицы "A" на соответствующие элементы j -ого столбца матрицы

"В".

Значения элементов матрицы "A" определяются в основной программе функцией Random(200), М=5, N=10. Программа выводит на экран массивы "A", "В" и "С".

1. 14. Модуль СRT

1. 14. 1. Управление экраном в текстовом режиме



[стр.Начало] [стр.1] [стр.2] [стр.3] [стр.4] [стр.5] [стр.6] [стр.7] [стр.8] [стр.9] [стр.10] [стр.11] [стр.12] [стр.13] [стр.14] [стр.15] [стр.16] [стр.17] [стр.18] [стр.19] [стр.20] [стр.21] [стр.22] [стр.23] [стр.24] [стр.25] [стр.26] [стр.27] [стр.28] [стр.29] [стр.30] [стр.31] [стр.32] [стр.33] [стр.34] [стр.35] [стр.36] [стр.37] [стр.38] [стр.39] [стр.40] [стр.41] [стр.42] [стр.43] [стр.44] [стр.45] [стр.46] [стр.47] [стр.48] [стр.49] [стр.50] [стр.51] [стр.52] [стр.53]