Модуль не представляет собой исполняемой программы, а только содержит набор средств для использования в исполняемой программе: типы данных, переменные, процедуры и функции. Исходный текст модуля имеет расширение .pas. Модуль компилируется отдельно от основной программы, откомпилированный модуль имеет расширение .tpu (Turbo Pascal Unit). Готовый откомпилированный модуль может быть использован в основной программе с помощью предложения uses, которое записывается сразуже после имени программы.
В Турбо Паскале имеются стандартные модули : DOS, CRT (Cathode Ray Tube, электронно-лучевая трубка), Printer, Graph, System и другие. Их не надо описывать, а можно сразу включать в программу предложением uses. Модуль System используется во всех программах, поэтому для него сделано исключение, его можно не включать в предложение uses, он будет подключен автоматически. Остальные модули требуют включения в предложение uses, если в программе используются ресурсы модуля, например, процедуры и функции.
Назначение стандартных модулей следующее. Модуль DOS использует системные ресурсы операционной системы MS-DOS . Возможно использование регистров, обслуживание прерываний, вызов других программ из программы на Паскале. Модуль CRT используется для обслуживания видеомонитора, клавиатуры, встроенного динамика. Процедуры очистки экрана clrscr и ожидание нажатия клавиши readkey содержатся именно в модуле CRT.
Модуль Graph содержит богатейший набор графических процедур и функций: проведение линий, работа с цветом, вызов графических примитивов, работа с текстом в графическом режиме, закраска замкнутых областей и т.п. Экран в графическом режиме рассматривается как набор пикселей. Модуль Printer служит для вывода информации на принтер.
Кроме стандартных модулей, в Турбо Паскале возможны модули пользователя, Они требуют описания, которое начинается ключевым словом языка unit и содержат 3 раздела: раздел интерфейса (interface), раздел реализации (implementation), раздел инициализации (необязательный).
После введения модулей Турбо Паскаль стал одним из наиболее распространенных языков профессионального программирования. С помощью модулей оказалось возможным выполнять большие работы коллективом программистов, разбив задачу на отдельные части, каждая из которых разрабатывается одним программистом.
За счет параллельной работы многих программистов срок разработки сокращается во много раз. Руководитель проекта распределяет работу и обеспечивает стыковку отдельных модулей в единое целое. При этом каждый программист может пользоваться своими идентификаторами, независимо от остальных. Совпадение идентификаторов в различных модулях не оказывает влияния на программу, т.к. каждый идентификатор используется в своем модуле.
Рассмотрим пример модуля для работы с комплексными числами. Комплексное число состоит из двух вещественных чисел, действительной и мнимой частей соответственно. Пусть имеются два комплексных числа x и y: x=a+bi; y=c+di. Здесь i квадратный корень из минус единицы (мнимая единица), причем i2= - 1. Если комплексное число z=e+fi, и z есть результат операции над x и y, то
z=x+y; e=a+c: f=b+d; (сложение)
z=x-y; e=a-c: f=b-d; (вычитание)
z=x*y; e=a*c-b*d: f=a*d+b*c; (умножение)
z=x/y; e=(a*c+b*d)/(c2+d2): f=(c*b-a*d)/(c2+d2): (деление)
Легко видеть, что при сложении и вычитании складываются и вычитаются соответственно действительные и мнимые части комплексных чисел, умножение и деление более сложны.
Для организации операций над комплексными числами представим каждое комплексное число в виде записи из двух полей вещественного типа: Re –действительная часть, Im – мнимая часть. Создадим модуль complex, в котором опишем комплексный тип com с двумя полями. В этом же модуле в разделе интерфейса опишем процедуры ad (сложение), su (вычитание), mu (умножение), di (деление) комплексных чисел (только заголовки). Тела процедур поместим в раздел реализации модуля. Раздел инициализации имеет вид:
begin
операторы
end.
Если раздел инициализации не содержит операторов, как в нашем примере, достаточно написать только end. Пример модуля complex.pas.
unit complex;{модуль арифметики комплексных чисел}
{$N+}
interface
uses dos,crt;
type com=record
re,im:real;
end;
var a,b,c:com;
procedure ad(var a,b,c:com);{сложение, c=a+b}
procedure su(var a,b,c:com);{вычитание, c=a-b}
procedure mu(var a,b,c:com);{умножение, c=a*b}
procedure di(var a,b,c:com);{деление, c=a/b, случай b =0 не предусмотрен }
procedure wr_com(var p:com); {печать комплексного числа}
implementation
procedure ad(var a,b,c:com);
begin c.re:=a.re+b.re;
c.im:=a.im+b.im;
end;{ad}
procedure su(var a,b,c:com);
begin c.re:=a.re-b.re;
c.im:=a.im-b.im;
end;{su}
procedure mu(var a,b,c:com);
begin c.re:=a.re*b.re-a.im*b.im;
c.im:=a.re*b.im+a.im*b.re;
end;{mu}
procedure di(var a,b,c:com);
var d:real;
begin d:=b.re*b.re+b.im*b.im;
c.re:=(a.re*b.re+a.im*b.im)/d;
c.im:=(b.re*a.im-a.re*b.im)/d;
end;{di}
procedure wr_com(var p:com);
begin
if p.im<0 then writeln(p.re:9:5,'-',-p.im:9:5,'i') else
writeln(p.re:9:5,'+',p.im:9:5,'i');
end;{wr_com}
begin
end.{unit}
Как уже было указано, модуль не может непосредственно выполняться. Нужно разработать основную программу, которая использует ресурсы модуля. В данном случае это программа com_arif.pas (комплексная арифметика). В программе вводятся 2 комплексных числа, затем с ними выполняются действия сложения, вычитания, умножения и деления, результаты выводятся на экран.
program com_arif;
uses complex;
var x,y,z:com; {тип com определен в модуле complex}
begin
writeln('Введите дейст. и мн. части первого числа');
read(x.re,x.im);
writeln('Введите дейст. и мн. части второго числа');
read(y.re,y.im);
write('x='); wr_com(x);
write('y='); wr_com(y);
ad(x,y,z); {z=x+y}
write('x+y=');wr_com(z);
su(x,y,z); {z=x-y}
write('x-y=');wr_com(z);
mu(x,y,z); {z=x*y}
write('x*y=');wr_com(z);
di(x,y,z); {z=x/y}
write('x/y=');wr_com(z);
end.