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

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

К сожалению, в Паскале нельзя использовать функции, значения которых имели бы структурированный тип (запись, например), поэтому арифметика комплексных чисел реализуется четырьмя процедурами:

UNIT Cmplx;

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

INTERFACE

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

type complex = record

re, im:real

end;

Procedure AddC (x, у : complex; var z : complex) ;
Procedure SubC (x, у : complex; var z : complex) ;
Procedure MulC (x, у : complex; var z : complex) ;
Procedure DivC (x, у : complex; var z : complex) ;
const        
с : complex = (re : 0.1; im : -1);  

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

IMPLEMENTATION

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

Procedure AddC; begin

z.re := x.re + y.re; z . im := x.im + y. im

end {AddC};

Procedure SubC;

begin

z.re := x.re - y. re ;

z.im := x.im - y.im

end {SubC};

Procedure MulC;

begin

z.re := x.re*y.re - x.im*y. im;

z.im := x.re*у.im + x.im*y.re

end {MulC};

Procedure DivC;

var

zz : real;

begin

zz := sqr(y.re) + sqr(y.im);

z. re := (x.re * y.re + x.im * y.im) / zz;

z.im := (x.re * y.im - x.im * y.re) / zz

end {DivC};

end.

Текст этого модуля следует поместить в файл CMPLX.PAS.

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

 

Стандартные модули

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

Этими модулями являются SYSTEM, DOS, CRT, PRINTER, GRAPH, OVERLAY, TURBOS и GRAPH3.

Модули GRAPH, TURBOS и GRAPHS выделены в отдельные TPU-файлы, а остальные входят в состав библиотечного файла TURBO.TPL.

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

Ниже приводится краткая характеристика стандартных модулей.

Модуль SYSTEM. В него входят все процедуры и функции стандартного Паскаля, а также встроенные процедуры и функции, которые не вошли в другие стандартные модули (например, INC, DEC, GETDIR и т.п.).

Как уже отмечалось, модуль SYSTEM подключается к любой программе независимо от того, объявлен ли он в предложении USES или нет, поэтому его глобальные константы, переменные и подпрограммы считаются встроенными в Турбо Паскаль.

Модуль PRINTER.

Делает доступным вывод текстов на матричный принтер.

В нем определяется файловая переменная LST типа TEXT, которая связывается с логическим устройством PRN. После подключения модуля может быть выполнена, например, такая программа:

Uses Printer;

begin

writeln (LST, 'Турбо Паскаль')

end.

Модуль CRT.

В нем сосредоточены процедуры и функции, обеспечивающие управление текстовым режимом работы экрана.

С помощью входящих в модуль подпрограмм можно перемещать курсор в произвольную позицию экрана, менять цвет выводимых символов и окружающего их фона, создавать окна. Кроме того, в модуль включены также процедуры «слепого» чтения клавиатуры и управления звуком.

Модуль GRAPH.

Содержит обширный набор типов, констант, процедур и функций для управления графическим режимом работы экрана.

С помощью подпрограмм, входящих в модуль GRAPH, можно создавать разнообразные графические изображения и выводить на экран текстовые надписи стандартными или разработанными программистом шрифтами.

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

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

Модуль DOS.

В модуле собраны процедуры и функции, открывающие доступ программам к средствам дисковой операционной системы MS- DOS.

Модуль OVERLAY.

Он необходим при разработке громоздких программ с перекрытиями.

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

Операционная система MS-DOS оставляет исполняемой программе около 580 Кбайт основной памяти (без учета резидентных программ и самой системы

Паскаль).

Память такого размера достаточна для большинства применений, тем не менее использование программ с перекрытиями снимает это ограничение.

Справочная информация

 

Существуют стандартные модули Паскаля (system, crt, graph и т.д.), справочная информация по которым дана в приложении.

Приведем пример разработки и использования модуля.

Рассмотрим следующую задачу.

Реализовать в виде модуля набор подпрограмм для выполнения следующих операций над обыкновенными дробями вида P/Q (P – целое, Q - натуральное):

- сложение;

- вычитание;

- умножение;

- деление;

- сокращение дроби;

- возведение дроби в степень N (N — натуральное);

- функции, реализующие операции отношения (равно, не равно, больше или равно, меньше или равно, больше, меньше).

Дробь представить следующим типом:

Type Frac=Record

Р: Integer;

Q: 1..32767

End;

 

Используя этот модуль, решить задачи:

 

1. Дан массив А, элементы которого — обыкновенные дроби.

Найти сумму всех элементов и их среднее арифметическое; ре­зультаты представить в виде несократимых дробей.

2. Дан массив А, элементы которого — обыкновенные дроби.

Отсортировать его в порядке возрастания.

Unit Droby;

Interface

Type

Natur=l..High(Longlnt) ;

Frac=Record

P: Longlnt;

Q: Natur

End;

Procedure Sokr(Var A: Frac);

Procedure Summa(A,B: Frac; Var C: Frac);

Procedure Raznost(A,B: Frac; Var C: Frac);

Procedure Proizvedenie(A,B: Frac; Var C: Frac);

Procedure Chastnoe(A,B: Frac; Var C: Frac);

Procedure Stepen(A: Frac; N: Natur; Var C: Frac);

Function Menshe(A,B: Frac): Boolean;

Function Bolshe(A,B: Frac): Boolean;

Function Ravno(A,B: Frac): Boolean;

Function MensheRavno(A,B: Frac): Boolean;

Function BolsheRavno(A,B: Frac): Boolean;

Function NeRavno(A,B: Frac): Boolean;

{Раздел реализации модуля} Implementation

{Наибольший общий делитель двух чисел -вспомогательная функция, ранее не объявленная) Function NodEvklid(A,B: Natur): Natur;

Begin

While AOB Do

If A>B Then

If A Mod B<>0 Then A:=A Mod В

Else A:=B

Else

If В Mod A<>0 Then B:=B Mod A

Else B:=A;

NodEvklid:=A End;

(Сокращение дроби}

Procedure Sokr;

Var M,N: Natur;

Begin

If A.P<>0

Then

Begin

If A.P<0

Then M:=Abs(A.P)

Else M:=A.P;

{Совмещение типов, т.к. А.Р -Longint}

N:=NodEvklid(M,A.Q);

A.P:=A.P Div N;

A.Q:=A.Q Div N

End

End;

Procedure Summa; {Сумма дробей}

Begin

{Знаменатель дроби}

C.Q:=(A.Q*B.Q) Div NodEvklid(A.Q,B.Q);

{Числитель дроби}

C.P:=A.P*C.Q Div A.Q+B.P*C.Q Div B.Q;

Sokr(C)

End;

Procedure Raznost; {Разность дробей}

Begin

{Знаменатель дроби}

C.Q:=(A.Q*B.Q) Div NodEvklid(A.Q,В.Q);

{Числитель дроби)

C.P:=A.P*C.Q Div A.Q-B.P*C.Q Div B.Q;

Sokr(C)

End;

Procedure Proizvedenie; {Умножение дробей)

Begin

{Знаменатель дроби}

C.Q:=A.Q*B.Q;

{Числитель дроби}

С.Р:=А.Р*В.Р;

Sokr(С)

End;

Procedure Chastnoe;

{Деление дробей}

Begin

{Знаменатель дроби}

C.Q:=A.Q*B.P;

{Числитель дроби}

C.P:=A.P*B.Q;

Sokr(С)

End;

Procedure Stepen; {Возведение дроби в степень}

Var I: Natur;

Begin

C.Q:=1;

C.P:=1;

Sokr(A);

For I:=l To N Do

Proizvedenie(А,С,С)

End;

Function Menshe; {отношение '<' между дробями}

Begin

Menshe:=A.P*B.Q<A.Q*B.P

End;

Function Bolshe; {отношение '>' между дробями}

Begin

Bolshe:=A.P*B.Q>A.Q*B.P

End;

Function Ravno; {отношение '=' между дробями}

Begin

Ravno:=A.P*B.Q=A.Q*B.P

End;

Function BolsheRavno; {отношение '>=' между дробями}

Begin

BolsheRavno:=Bolshe(А,В) Or Ravno(A,B)

End;

Function MensheRavno; {отношение '<=' между дробями}

Begin

MensheRavno:=Menshe(А,В) Or Ravno(A,B)

End;

Function NeRavno; {отношение '<>' между дробями}

Begin

NeRavno:=Not Ravno(A,B)

End;

{Раздел инициализации модуля}

Begin

End.

 

При разработке модуля рекомендуется такая последовательность действий:

· Спроектировать модуль, т.е. определить основные и вспомо­гательные подпрограммы и другие ресурсы.

· Описать компоненты модуля.

· Каждую подпрограмму целесообразно отладить отдельно, после чего «вклеить» в текст модуля.

Сохраним текст разработанной программы в файле droby . pas и откомпилируем наш модуль.

Для этого можно воспользоваться внешним компилятором, поставляемым вместе с Паска­лем.

Команда будет выглядеть так: трс droby . pas.

Если в тексте нет синтаксических ошибок, получим файл droby . tpu, иначе будет выведено соответствующее сообщение с указанием строки, содержащей ошибку.

Другой вариант компиляции: в меню систе­мы программирования

Паскаль выбрать Compile/Destination Disk, затем — Compile/Build.

Теперь можно подключить модуль к программе, где планиру­ется его использование.

Решим первую задачу — выполним сум­мирование массива дробей.

Program Sum; Uses Droby;

Var A: Array[1..100] Of Frac;

I,N: Integer;

S: Frac;

Begin

Write('Введите количество элементов массива:’);

ReadLn(N);

S.P:=0; S.Q:=1; {Первоначально сумма равна нулю}

For I:=l To N Do {Вводим и суммируем дроби}

Begin

Write('Введите числитель',I,' -и дроби:');

ReadLn(A[I]. Р);

Write ('Введите знаменатель ',1,'-й дроби:');

ReadLn(A[I].Q) ;

Summa(A[I] ,S, S) ;

End;

WriteLn ('Ответ:',S.P, '/',S.Q)

End.

Вторую задачу предлагается решить самостоятельно.

Как видно из примера, для подключения модуля используется служебное слово uses,

после которого указывается имя модуля.

Данная строка записывается сразу же после заголовка программы.

Если необходимо подключить несколько модулей, они перечисля­ются через запятую.

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

Достаточно знать назначение подпрограмм и их спецификации, т. е. имена и параметры.

По такому принципу осуществляется работа со всеми стандартными модулями.

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