Нередко при проектировании алгоритмов можно выявить похожие и повторяющиеся его участки, выполняющие некоторую типичную операцию. Например, такой операцией может быть ввод-вывод или сортировка массива. Язык Pascal позволяет каждый раз по мере необходимости повторять в программе набор операторов, который позволяет выполнять такие действия. Однако есть более элегантное решение. Оно состоит в использовании подпрограмм – имеющих свой самостоятельный и законченный смысл участков программного кода, описанных отдельно от основной программы и вызываемых по мере необходимости.
Подпрограммы в языке Pascal представлены функциями (Function) и процедурами (Procedure). Функции, в отличие от процедур, возвращают некоторое значение и могут быть вызваны при вычислении выражения.
Для придания подпрограммам универсальности предусмотрен механизм передачи параметров. Параметры – данные, при помощи которых конкретизируются действия при каждом вызове подпрограммы. Например, функция cos(X)
позволяет рассчитать значение косинуса от конкретного углового значения. Само же угловое значение передаётся в качестве параметра X.
Синтаксис объявления подпрограмм в языке Pascal схож с синтаксисом описания основной программы и представлен ниже:
<заголовок подпрограммы>
[Const <описание_констант>;]
[Type <описание_типов>;]
[Var <описание_переменных>;]
Begin
<Операторы_тела_подпрограммы>;
End;
В секциях Const, Type и Var объявляются константы, типы и переменные, используемые только внутри подпрограммы. Если эти идентификаторы заняты некоторыми внешними объектами, объявленными на уровне программы, то внешние объекты становятся недоступными. В этом случае говорят о конфликте имён или перекрытии объектов программы по идентификатору.
Если переменные основной программы объявлены до описания подпрограмм, то они являются глобальными. Глобальные переменные и константы доступны также и для операторов в теле подпрограммы. Однако следует помнить, что использование глобальных переменных для передачи данных в подпрограмму (в обход параметров) снижает её универсальность и может стать причиной возможных ошибок, трудно диагностируемых в процессе отладки.