В качестве еще одного примера модуля создадим модуль, реализующий арифметику комплексных чисел, которой нет в Турбо Паскале. Каждое действие реализуется своей процедурой.
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, является физическим файлом в Турбо Паскале. Файл является некоторой структурой данных с однородными компонентами, число которых при описании файла жестко не фиксируется. Обращение к внешним устройствам из программы на Паскале дает возможность формировать большие объемы информации, корректировать информацию на всем протяжении времени ее существования, транспортировать данные в другие программы.