Компиляция модулей.
При компиляции модуля или основной программы все упоминающиеся в предложении uses модули должны быть предварительно откомпилированы, и результаты компиляции помещены в одноименные файлы с расширением tpu (Turbo Pascal Unit). Например:
uses Global;
Если в программе (модуле) имеется такое предложение, то на диске должен находиться файл global.tpu. Данные файл создается автоматически при компиляции модуля global.
Подключение модулей к основной программе и их возможная компиляция осуществляются в порядке их объявления в предложении uses. При переходе к очередному модулю система предварительно отыскивает все модули, на которые он ссылается. Ссылки модулей друг на друга могут образовывать древовидную структуру любой сложности, однако запрещается явное или косвенное обращение модуля к самому себе. Например, недопустимы следующие объявления:
unitA; unitВ;
Interface interface
usesВ; usesА;
… …
Implementation implementation
… …
End. end.
Это ограничение можно обойти, если «спрятать» предложение uses в исполняемых частях зависимых модулей:
unitA; unitВ;
Interface interface
… …
Implementation implementation
usesВ; usesА;
… …
End. end.
Доступ к объявленным в модуле объектам.
Пусть, например, необходимо создать модуль, реализующий арифметику комплексных чисел (такая арифметика в Турбо Паскале, к сожалению, не предусмотрена). В Турбо Паскале нельзя использовать функции, значения которых имели бы структурированный тип (запись, например), поэтому арифметика комплексных чисел реализуется четырьмя процедурами:
unit Cmplx;
Interface
Type
complex = record
re, im : real;
end;
procedure AddC (x, y : complex; var z : complex);
procedure SubC (x, y : complex; var z : complex);
procedure MulC (x, y : complex; var z : complex);
procedure DivC (x, y : complex; var z : complex);
const
c : 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 * y.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-файл, после чего в создаваемых программах будут доступны процедуры из новой библиотеки. Например, в программе, приведенной ниже, осуществляются арифметические операции над парой комплексных чисел.
uses Cmplx;
Var
a, b, c : complex;
begin
a.re := 1;
a.im := 1;
b.re := 1;
b.im := 2;
AddC (a, b, c);
WriteLn (‘Сложение : ’, c.re:5:1, c.im:5:1, ‘i’);
SubC (a, b, c);
WriteLn (‘Вычитание : ’, c.re:5:1, c.im:5:1, ‘i’);
MulC (a, b, c);
WriteLn (‘Умножение : ’, c.re:5:1, c.im:5:1, ‘i’);
DivC (a, b, c);
WriteLn (‘Деление : ’, c.re:5:1, c.im:5:1, ‘i’);
end.
После объявления usesCmplx программе стали доступны все объекты, объявленные в интерфейсной части модуля Cmplx. При необходимости можно переопределить любой их этих объектов, как это произошло, например, с объявленной в модуле типизированной константой С. Переопределение объекта означает, что вновь объявленный объект «закрывает» ранее определенный в модуле одноименный объект. Чтобы получить доступ к «закрытому» объекту, нужно воспользоваться составным именем: перед именем объекта поставить имя модуля и точку. Например, следующий оператор выведет на экран содержимое «закрытой» типизированной константы из предыдущего примера.
WriteLn(cmplx.с.re:5:1, cmplx.с.im:5:1, ‘i’);
Стандартные модули
Турбо Паскале имеется восемь стандартных модулей, в которых содержатся большое число разнообразных типов, констант, процедур и функций. Этими модулями являются SYSTEM, DOS, CRT, PRINTER, GRAPH, OVERLAY, TURBO3 и GRAPH3. Модули GRAPH, TURBO3 и GRAPH3выделены в отдельные tpu-файлы, а остальные входят в состав библиотечного файла turbo.tpl. Лишь один модуль SYSTEMподключается к любой программе автоматически, остальные становятся доступны только после указания их имен в списке, следующем за словом uses.
Наиболее полезным из стандартных модулей является иодуль CRT, в котором сосредоточены процедуры и функции, позволяющие управлять текстовым режимом работы экрана. С их помощью можно перемещать курсор в произвольную позицию экрана, менять цвет выводимых символов и окружающего их фона, создавать окна.
В качестве примера можно указать некоторые процедуры и функции.
function ReadKey: char;
Читает символ с клавиатуры. Приостанавливает выполнение программы до нажатия на любую клавишу, кроме Shift, Ctrl, Alt, CapsLock, NumLock, ScrollLock.
function WhereX: Byte;
Возвращает горизонатльную координату текущей позиции курсора относительно текущего окна.
function WhereY: Byte;
Возвращает вертикальную координату текущей позиции курсора относительно текущего окна.
procedure ClrScr;
Очищает экран и помещает курсор в верхний левый угол.
procedure Delay (D: Word);
Приостангавливает работу программы на указанное число D миллисекунд.
procedure GotoXY (X, Y: Byte);
Перемещает курсор в нужное место экрана с координатами X, Y (рассчитываются не в пикселях, а в позициях курсора).
procedure Sound (F: Word);
Включает звуковой генератор. F- частота звука (Гц).
Состав и назначение данных модулей обычно приводятся в литературе, подробно описывающей компоненты программной среды Турбо Паскаля.
Дата добавления: 2017-01-29; просмотров: 1322;