- •59. Модули
- •58. Процедуры и функции пользователя
- •56. Операторы цикла с предусловием (while)
- •52. Оператор безусловного перехода
- •49. Для обмена информацией между пользователем и пк все данные организуются в файлы.
- •48. Процедуры и функции для работы с типизированными файлами.
- •47. Типизированные файлы
- •46. Файлы
- •43. Объединение разнородных элементов (Запись)
- •42. Типы данных
- •41. Определение множества
- •40. Множество — тип и структура данных в информатике, является реализацией математического объекта множество.
- •35. Одномерные массивы. Формирование и вывод одномерных массивов
- •30. Символьный тип
- •29. Арифметические операции
- •28. Вещественный тип данных
- •25. Раздел описания констант в языке Турбо Паскаль
- •23. Структура программы на языке Pascal
- •22. Понятие языка программирования
60. Общая структура модуля: unit ModuleName; {заголовок модуля}
interface {раздел интерфейса} uses {используемые в интерфейсе модули} const type {экспортируемые (глобальные) описания} var function . . . {заголовки экспортируемых подпрограмм} procedure
implementation {раздел реализации} uses {используемые при реализации модули} label const {внутренние (локальные) описания} type var function . . . {подпрограммы, указанные в интерфейсе} procedure function . . . { внутренние (локальные) подпрограммы} procedure
[begin] {раздел инициализации [необязателен]} {инициирующая часть} end. {ModuleName} Заголовок модуля состоит из ключевого слова unit (программная единица) и имени модуля. Имя модуля должно быть правильным идентификатором (в смысле Паскаля) и совпадать с именем дискового файла, содержащего данный модуль. Например, модуль с заголовком unit Math_Lib содержит исходный текст в файле Math_Lib.pas, а откомпилированный код – в файле Math_Lib.tpu.
Интерфейсная часть модуля содержит объявления всех глобальных объектов модуля, которые доступны другим программным единицам. При объявлении глобальных подпрограмм в интерфейсной части указываются только их заголовки, так как тела подпрограмм уже откомпилированы в данном модуле. Например:
unit Math_Lib; interface function Max (X, Y: Real): Real; function Min (X, Y: Real): Real; implementation . . .
Если теперь в использующей программе написать uses Math_Lib; то в ней станут доступны две функции – Max и Min из модуля Math_Lib.
Исполняемая часть (implementation) в основном содержит описания, т.е. заголовки и тела подпрограмм, объявленных в секции интерфейса. Кроме того, в ней описываются локальные для модуля объекты (константы, типы, переменные и подпрограммы). Если подпрограмма объявлена в интерфейсе, то в ее заголовке в секции реализации можно опускать список формальных параметров и тип функции, однако это снижает понятность программы.
Пример: unit Math_Lib; . . . implementation
function Max (X, Y: Real): Real; begin if X > Y then Max := X else Max := Y; end; {Max} . . .
В инициирующей части помещаются операторы, которые исполняются до передачи управления основной программе. Обычно они используются для подготовки модуля к работе. Например, в этой секции могут инициироваться переменные, открываться нужные файлы, устанавливаться связи с другими ПК и т.д. Если такая подготовка не нужна, то инициирующая часть вместе с начинающим ее словом begin опускается.
В качестве примера ниже приводится текст модуля, содержащего четыре часто используемые функции: min (x, y), max (x, y), xn и xy, которые отсутствуют в стандартном модуле System (в Object Pascal системы Delphi эти функции есть).
unit Math_Lib; {Библиотека математических функций}
interface {Секция интерфейса}
{Заголовки подпрограмм} function Max (X, Y: Real): Real; {Максимальное из X и Y} function Min (X, Y: Real): Real; {Минимальное из X и Y} function IntPower (X: Real; N: Integer): Real; {Целая степень} function Power (X, Y: Real): Real; {Дробная степень}
implementation {Секция реализации}
{Тела подпрограмм} function Max (X, Y: Real): Real; begin if X > Y then Max := X else Max := Y; end;
function Min (X, Y: Real): Real; begin if X > Y then Min := Y else Min := X; end;
function IntPower (X: Real; N: Integer): Real; {X в степени N} var i : Word; P : Real; begin P := 1; for i := 1 to Abs (N) do P := P * X; if N < 0 then P := 1 / P; IntPower := P; end;
function Power (X, Y: Real): Real; {X в степени Y} begin if X > 0 then Power := Exp (Y * Ln (X)) else if Y = 0 then Power := 1 else if Y = 1 then Power := X else Power :=0; end; end.{Math_Lib} Для демонстрации использования модуля Math_Lib предлагается программа, в которой вводятся вещественные числа X, Y и целое число N, после чего вычисляются четыре вышеперечисленные функции.
program Mat_Demo; {Демонстрация использования модулей} uses CRT, Math_Lib; var X, Y : Real; N : Integer; begin ClrScr; Write (' Дробное основание степени X = '); Readln (X); Write (' Дробный показатель степени Y = '); Readln (Y); Write (' Целый показатель степени N = '); Readln (N); Writeln; Writeln (' Max (', X:4:2, ', ', Y:4:2, ') = ', Max (X, Y):5:2); Writeln; Writeln (' Min (', X:4:2, ', ', Y:4:2, ') = ', Min (X, Y):5:2); Writeln; Writeln (' IntPower (', X:4:2, ', ', N, ') = ', IntPower (X, N):8:6); Writeln; Writeln (' Power (', X:4:2, ', ', Y:4:2, ') = ', Power (X, Y):4:2); end.
59. Модули
|