Инициализационная часть

BEGIN

Основной блок модуля

END.

Заголовок модуля аналогичен заголовку программы: в модуле вместо зарезервированного слова PROGRAM используется слово UNIT.

Здесь могут присутствовать директивы компилятору, дающие общие установки и соглашения для всего модуля.

Например,

{$S+} - директива компилятору: включить (отключить) контроль возможного переполнения стека;

{$N+} - директива компилятору: использовать числовой процессор (реализовать операции с плавающей точкой программно), применяют для переменных типа real;

{$E+} - директива компилятору: включить (отключить) режим программной эмуляции сопроцессора, применяют для переменных типа extended – вещественное число повышенной точности (10 байт).

При написании модуля необходимо придерживаться следующих основных правил:

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

- Имя модуля должно совпадать с именем файла, в котором он будет храниться. Отсюда, имя модуля не может состоять более чем из 8 символов.

В интерфейсной части описываются все константы, типы данных и переменных, процедуры и функции, доступные в этом модуле для использования внешними программами. Интерфейсная часть модуля несёт всю информацию, необходимую для использования процедур и функций, определённых в модуле. Любая другая информация о модуле для обычного его использования не нужна.

Примечание. В рамках приложение Турбо Паскаль 7.0 поставляются стандартные модули System, Strings, Crt, Printer, Dos, WinDos, Graph, Overlay, Graph3 и Turbo3.

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

Следом за оператором USES описываются доступные извне и необходимые для описания процедур и функций определения типов данных, констант и переменных.

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

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

Реализационная часть – это часть, в которой определяются процедуры и функции.

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

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

Инициализационная часть представляет собой основной блок модуля. Приведённые в ней операторы выполняются первыми, то есть они выполняются перед операторами основного блока главной программы, в которую включён данный модуль.

Чтобы окончательно оформить эту программу как модуль, необходимо сохранить объектный модуль данной программы на диске. Для опции Compile / Destination установить значение Disk и выполнить компиляцию с помощью комбинации клавиш [Ctrl + F9].

ТП7.0 распознаёт в начале текста модуля оператор модуля UNIT и автоматически создаст файл с расширением *.TPU вместо *.EXE (как для обычных программ). Выдаваемое при этом сообщение “Can not run a unit!” просто информирует Вас о том, что модуль самостоятельно не выполняется.

В опции Options / Directories установить значение параметра Include Directory равным пути, где расположен, подключаемый к основной программе, файл с расширением *.TPU (Turbo Pascal Unit), то есть модуль.

Задача 9.1. Вычислить значение функции F(x) по формуле

.

Нахождение корня n-ой степени осуществить через подпрограмму - функцию, а расчёт значения по формуле – через подпрограмму - процедуру. Подпрограммы поместить в модуль.

Листинг модуля Second

Unit second; {Имя модуля}

{second.pas}

interface {Начало раздела объявлений}

Function FunSqrt (x1: real; k: integer): real; {Вычисление корня числа}

Procedure ProcY (var y1: real; x1: real); {Расчёт значения по формуле}

Implementation {Начало раздела реализации}

Uses Crt;

Function FunSqrt; {Тело функции}

begin

FunSqrt:= exp((1/k) * ln(x1));

end;

Procedure ProcY; {Тело процедуры}

Const b = 10.7;

c = 0.4;

var a: real;

begin

a:= exp(0.1*x1) + x1;

y1:= ln(FunSqrt(a,2)) / (x1 + FunSqrt(b,3) + arctan(x1)) + c;

end;

End.

Листинг основной программы

program Task;

Uses crt,

second;{Подключение модуля, в котором хранятся функция вычисления корня и процедура вычисления значения по формуле}

Var x, y: real; {Глобальные переменные}

s: char;

begin

ClrScr;

Repeat

TextColor(12); {Розовый цвет текста}

Writeln('Введите значение переменной Х:');

Readln (x);

ProcY (y,x); {Вычисляется значение по формуле}

TextColor(9); {Синий цвет текста}

Writeln('Значение переменной Y равно:', '':2, y:10:6);

TextColor(14); {Жёлтый цвет текста}

Writeln('Продолжить (Y/N)?');

Readln (s);

Until (s = 'N') or (s = 'n');

end.

Примечание. Так как заголовки функции Funsort и процедуры Procy в модуле были описаны в интерфейсной части, то это позволит пользователю использовать эти подпрограммы в любой другой внешней программе, подключив соответствующий модуль. Учитывая условия задачи, где требовалось во внешней программе вычислить только значение переменной y по указанной формуле, подставляя каждый раз различные значения x, то есть использовать только процедуру, необходимо изменить листинг модуля. Для этого достаточно описание заголовка функции Funsort, вычисляющей корень n-ой степени, из интерфейсной части переместить в раздел реализации.

Задача 9.2. Дана матрица A(n, m). Необходимо: упорядочить элементы в каждой строке матрицы по возрастанию, а сами строки расположить по убыванию количества положительных элементов в строке. В программе организовать вызов процедуры, реализующей общую часть задания. Формирование элементов массива A случайным образом, вывод элементов массива оформить в виде процедур. Сортировку строк и элементов в строках матрицы A оформить в подпрограммах (процедурах). Нахождение количества положительных элементов в строке матрицы А выполнить с помощью функции. Процедуры и функцию описать в модуле.

Листинг модуля Second2

unit second2;


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: