Доступ к объявленным в модуле объектам

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

 

UNIT Cmplx;

{————————————————————————}

INTERFACE

{————————————————————————}

type

complex = record

re,im: real

end

Procedure AddC (x,y : 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 * y.im + x.im * y.re

end; {MulC}

 

Procedure DivC: var zz : real;

begin

zz := sgr(y.re) + sgr(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-файл, после чего программе станут доступны все процедуры из новой библиотеки. Например, в следующей программе приводится пример выполнения действий над комплексными числами.

Пример. 5.3.

 

Uses Cmplx;

Var f, b, с : 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.

 

После объявления Uses Cmplx программе стали доступны все объекты, объявленные в интерфейсной части модуля CMPLX. При необходимости можно переопределить любой из этих объектов, как это произошло, например, с объявленной в модуле типизированной константой С. Переопределение объекта означает, что вновь объявленный объект “закрывает” ранее определенный в модуле одноименный объект. Чтобы получить доступ к “закрытому” объекту, нужно воспользоваться составным именем: перед именем объекта поставить имя модуля и точку. Например, оператор

WriteLn(cmplx.c.re:5:1, cmplx.c.im:5:1,’i’);

выведет на экран содержимое “закрытой” типизированной константы из примера 5.3.

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

В Турбо Паскале имеются восемь стандартных модулей: SYSTEM, DOS, CRT, PRINTER, GRAPH, OVERLAY, TURBO3 и GRAPH3. Модули GRAPH, TURBO3 и GRAPH3 выделены в отдельные TPU-файлы, а остальные входят в состав библиотечного файла TURBO.TPL. Лишь один модуль SYSTEM подключается к любой программе автоматически, все остальные необходимо объявлять, указывая их за словом USES.

Рассмотрим кратко стандартные модули.

Модуль SYSTEM. В него входят все процедуры и функции стандартного Паскаля, а также встроенные процедуры и функции, которые не вошли в другие стандартные модули. Так как этот модуль подключается автоматически, то входящие в него процедуры и функции считаютсявстроенными в Турбо Паскаль. В частности, в модуль входят:

- все стандартные арифметические функции: Аbs, ArcTan, Cos, Sin, Exp, Frac, Int, Ln, Pi, Sqr, Sqrt;

- процедуры для величин порядкового типа: Dec (уменьшение переменной), Inc (увеличение переменной);

- функции для величин порядкового типа: Odd (проверка аргумента на нечетность), Pred (предшествующее значение аргумента),Succ (следующее значение аргумента);

- процедуры работы со строками: Delete (удаление подстроки из строки); Insert (помещение подстроки в строку); Str (преобразование числа в строковую переменную); Val (преобразование символьного представления числа в двоичное);

- функции работы со строками: Concat (объединение строк); Copy (выделение подстроки); Length (длина строки); Pos (поиск подстроки в строке);

- функции преобразования типов: Chr (получение символа по его коду); High (получение максимального значения величины); Low (получение минимального значения величины); Ord (порядковый номер величины перечисляемого типа); Round (округление вещественного числа до целого); Trunc (целая часть числа);

- функции управления вводом-выводом: Eof (конец файла); FileSize (текущий размер файла) и другие функции;

- процедуры управления вводом-выводом: Append (открытие файла для добавления в него информации); Assign (связь файловой переменной с внешним файлом); Close (закрытие файла); Read (чтение информации из файла); Write (запись информации в файл); Reset (открытие существующего файла) и другие функции;

- процедуры управления динамической памятью (6 функций);

- функции управления памятью (12 функций);

- функции управления программой: Break (досрочный выход из цикла); Continue (начало новой итерации цикла); Exit (выход из текущей программы); Halt (прекращение выполнения программы): RunError (прекращение выполнения программы с выдачей сообщения об ошибке);

- процедуры и функции разнообразного назначения: Random (случайное число); Randomize (инициализация генератора случайных чисел) и другие (11 функций);

Модуль CRT. В него входят процедуры и функции, обеспечивающие управление текстовым режимом работы экрана. Подпрограммы, входящие в модуль, могут управлять перемещением курсора в произвольную позицию экрана, менять цвет фона экрана и выводимых символов, создавать окна, управлять звуком, чтением кодов нажимаемых клавиш. При работе с экраном через модуль CRT весь экран разбивается на отдельные строки, а каждая строка - на отдельные позиции, в каждую из которых можно поместить один символ. Образуются отдельные неделимые прямоугольные элементы. Для каждого элемента можно задать цвет фона и цвет символа. Модуль CRT позволяет работать не только со всем экраном, но и выделять в нем прямоугольные окна. При работе в окне координаты отсчитываются от левого верхнего угла окна.

Процедуры и функции модуля CRT:

- задание текстового режима TextMode;

- процедуры управления цветом: HighVideo (задание высокой яркости символов); LowVideo (задание малой яркости символов); NortVideo (задание исходной яркости символов); TextBackground (задание цвета фона); TextColor (задание цвета символов);

- процедуры работы с экраном: CIrEol (удаление символов от курсора до конца строки); CIrScr (очистка экрана); DelLine (удаление строки, в которой находится курсор); GotoXY (перемещение курсора в заданную позицию); InsLine (добавление пустой строки на экране); Window (задание размеров окна);

- функции работы с экраном: WhereX (текущая координата Х курсора); WhereY (текущая координата Y курсора);

- функции работы с клавиатурой: KeyPressed (проверка нажатия клавиши); ReadKey (чтение символа с клавиатуры);

- процедуры управления звуком: Sound (включение звука); NoSound (отключение звука);

- другие процедуры: Delay (задержка выполнения программы); AssignCrt (связь текстового файла с устройством CRT).

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

 

Program Primer;

Uses Printer;

Begin Writeln (LST, ‘Турбо Паскаль’) End.

Модуль GRAPH. Содержит обширный набор типов, констант, процедур и функций для управления графическим режимом работы экрана. С помощью подпрограмм, входящих в модуль, можно создавать разнообразные графические изображения. Специальные драйверы позволяют использовать широкий выбор шрифтов различного размера и стилей начертания. При работе в графическом режиме весь экран разбивается на отдельные “точки” - пиксели, которые можно закрасить в тот или иной цвет. Каждый пиксель имеет две координаты: Х и Y. Количество пикселей зависит от типа адаптера и режима его работы (от 320х200 до 1024х768). В модуле GRAF 81 процедура и функция.

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

Модуль OVERLAY. Предназначен для использования при разработке больших программ с перекрытием. Использование программ с перекрытием снимает ограничение 580 кбайт основной памяти для программы на Турбо Паскале. Оверлейные программы перегружаются в оперативную память отдельными частями - секциями. Отдельные оверлейные части программы должны быть оформлены как отдельные модули, причем в них необходимо использовать ключ компилятора 0+. Кроме того, необходимо предусмотреть, чтобы при вызове оверлейных процедур и функций все активные в этот момент подпрограммы имели “дальнюю” адресацию (ключ компилятора {$F+}). Подключение оверлейных модулей к основной программе помимо стандартного использования раздела USES должно содержать ключ компилятора $O unitname с указанием имени оверлейного модуля.

Подробнее о стандартных модулях можно прочитать в рекомендованной литературе [4, с.570-590; 5, с.109-195], а также в специальных разделах документации и пособиях.



Файлы

Данные, обрабатываемые программой, могут находиться не только в оперативной памяти компьютера, но и располагаться на устройствах внешней памяти в файлах. Под файлом понимается либо именованная область внешней памяти ПК (жесткий диск, дискета, CD и т.д.), либо логическое устройство – потенциальный источник или приемник информации. Все, что является файлом в MS DOS, является физическим файлом в Турбо Паскале. Файл является некоторой структурой данных с однородными компонентами, число которых при описании файла жестко не фиксируется. Обращение к внешним устройствам из программы на Паскале дает возможность формировать большие объемы информации, корректировать информацию на всем протяжении времени ее существования, транспортировать данные в другие программы.