- •От автора
- •1. Общая схема решения задачи на персональном компьютере
- •2. Структура программы на языке Паскаль
- •3. Арифметические типы данных. Числовые константы и переменные. Оператор присваивания. Выражение
- •4. Операторы ввода-вывода
- •5. Арифметические операции. Стандартные математические функции
- •6. Символьный тип данных
- •7. Логический тип данных. Операции сравнения. Логические операции
- •8. Условный оператор. Блок. Оператор выбора
- •9. Операторы цикла
- •10. Метки. Оператор Goto. Процедура Halt
- •11. Интервальные типы данных. Оператор Type. Массивы
- •Var a : Array[1..33000] Of Word;
- •Var a : Array[1..3] Of Real;
- •Var e,f : Massiv;
- •Var a : Array[1..10] Of Array[1..20] Of Real;
- •12. Процедуры и функции. Сфера действия описаний
- •13. Открытые массивы и нетипизированные параметры
- •14. Множества
- •15. Тип String
- •16. Графические средства языка Паскаль
- •17. Особенности вещественных вычислений
- •18. Записи
- •19. Тип "перечисление"
- •20. Модуль Crt
- •Var TextAttr : Byte
- •21. Модули. Создание и использование модулей
- •Interface
- •Implementation
- •22. Файлы
- •23. Другие средства обработки файлов и модуль dos
- •24. Процедурные типы
- •25. Указатели и динамическая память
- •26. Динамические структуры: списки, деревья
- •27.Открытые строки
- •28. Использование командной строки и вызов внешних программ
- •29. Обработка программных прерываний
- •30. Объекты
- •31.Рекурсия и динамическое программирование
- •32. Рекурсия и стек отложенных заданий
- •33. Стеки и очереди
- •34. Комбинаторные алгоритмы
- •35. Бинарные деревья
- •36. Упорядоченные бинарные деревья и приоритетные очереди
- •37. Алгоритмы сортировки
- •38. Графы
- •Рекомедуемая литература
- •Содержание
21. Модули. Создание и использование модулей
Наряду со стандартными модулями Паскаля вы можете создавать и использовать в программах свои собственные модули. Модуль имеет следующую структуру:
Unit имя модуля;
Interface
интефейсная часть
Implementation
внутренняя часть
Begin
исполняемая часть
End.
Имя модуля - идентификатор длиной не более 8 символов, причем файл, содержащий модуль, должен иметь такое же имя. После ключевого слова Interface располагаются описания типов, констант, переменных, функций и процедур, которые будут доступны пользователю этого модуля. Ключевое слово Implementation открывает внутреннюю часть модуля. В ней должны быть записаны все процедуры и функции, заголовки которых есть в интерфейсной части. Кроме того, во внутренней части можно описывать и другие переменные, константы, типы, функции и процедуры, но они уже будут недоступны другим программам. Исполняемая часть модуля может содержать обычные операторы, которые выполняются до начала выполнения программы, использующей этот модуль. Но, как правило, исполняемая часть пустая (а можно вообще не записывать слово Begin). Любой модуль может использовать другие модули как в интерфейсной, так и во внутренней части, но следует избегать перекрестных ссылок, когда модуль А использует модуль Б, а Б использует А. Напишем небольшой модуль.
Unit Service; {исходный текст модуля должен находиться в файле Service.pas}
Interface {интерфейсная часть модуля, константы OK и Error, переменная Result и процедуры DrawWindow и PrintString доступны любой программе, в которой есть оператор Uses Service}
Const
OK=0;
Error=-1;
Var
Result:ShortInt; {переменная возвращает значение OK или Error}
Procedure DrawWindow(x1,y1,x2,y2,BkColor:Byte); {процедура рисует на экране окно}
Procedure PrintString(x,y,BkColor,Color:Byte; s:String); {процедура выводит строку на экран}
Implementation {внутренняя часть модуля}
Uses Crt;
Var xSize,ySize : Byte;
{переменные, в которых хранятся размеры текущего окна}
Procedure Clear;
{внутренняя процедура, недоступная пользователям модуля}
Begin
TextAttr:=$07;
Window(1,1,80,25);
ClrScr;
End;
Procedure DrawWindow;
{во внутренней части список параметров указывать не обязательно}
Begin
If (x1<1)Or(x1>79)Or(x2<x1)Or(x2>80)Or
(y1<1)Or(y1>24)Or(y2<y1)Or(y2>25) Then Begin
{координаты окна неверны}
Result:=Error;
Exit;
End;
Window(x1,y1,x2,y2);
xSize:=x2-x1+1;
ySize:=y2-y1+1;
TextBackground(BkColor);
ClrScr;
Result:=OK; {вывод окна завершен удачно}
End;
Procedure PrintString;
Begin
If (x<1)Or(x>xSize)Or(y<1)Or(y>ySize) Then Begin
{координаты выводимой строки неверны}
Result:=Error;
Exit;
End;
GotoXY(x,y);
TextBackground(BkColor);
TextColor(Color);
Write(s);
Result:=OK; {вывод строки завершен удачно}
End;
Begin
{исполняемая часть модуля - экран будет очищен, прежде чем начнется выполнение программы}
Clear;
End.
Если откомпилировать этот модуль, то будет создан файл с именем SERVICE.TPU, который впоследствии и будут использовать наши программы (расширение TPU означает Turbo Pascal Unit). Например:
Uses Service;
Begin
Randomize;
Repeat
DrawWindow (1+Random(80), 1+Random(25),
1+Random(80), 1+Random(25), Random(8));
Until Result=OK;
Repeat
PrintString(1+Random(80),1+Random(25),
Random(8),Random(16),'OK');
Until Result=OK;
End.