Подпрограмма – логически законченная и специальным образом оформленная
часть программы, которая может вызываться по имени для выполнения
из других точек программы неограниченное число раз.
Использование
подпрограмм позволяет улучшить структурированность программы, так
как основная программа содержит основной алгоритм решения задачи,
а в подпрограммах оформляются вспомогательные алгоритмы.
В языке
Object Pascal подпрограммы разделяют на два вида: процедуры и функции.
В Delphi
есть много стандартных подпрограмм, которые размещаются в различных
стандартных модулях. Кроме того, программист может создавать собственные
подпрограммы, которые называются пользовательскими.
Каждая
пользовательская подпрограмма должна быть объявлена в разделе описания
процедур или функций основной программы.
Описание
пользовательских подпрограмм
Подпрограммы
(процедуры и функции) имеют такую же структуру, как и основные программы.
При
описании подпрограммы указывается её имя, список формальных параметров
и выполняемые подпрограммой действия (тело подпрограммы).
Описание
процедуры
Procedure
имя [(список формальных параметров с указанием типа)];
<описание локальных параметров>
Begin
<операторы тела процедуры>
end;
Список
параметров не является обязательным.
Описание
функции
Function
имя [(список формальных параметров с указанием типа)]: тип возвращаемого
результата;
<описание локальных параметров>
Begin
< операторы тела функции>
end;
Локальными
параметрами могут быть: переменные (var); константы (const); метки
(label); процедуры и функции и др.
Локальные
параметры могут быть использованы только при работе подпрограммы,
к ним нет доступа из основной программы.
Вызов
подпрограмм
При
вызове подпрограммы указываются имя подпрограммы и список аргументов
(фактических параметров), передаваемых подпрограмме.
Для
обращения к процедуре используется оператор вызова процедуры. В теле
функции должен обязательно быть хотя бы один оператор присваивания,
в левой части которого стоит имя функции. Именно он и определяет значение,
возвращаемое функцией.
Если
таких операторов несколько, то результатом функции будет значение
последнего выполненного оператора присваивания. В этих операторах
вместо имени функции можно указывать переменную Result, которая создаётся
в качестве синонима для имени функции.
Обмен
данными между основной программой и подпрограммой
Обмен
данными между основной программой и подпрограммой выполняется через
глобальные переменные либо через формальные и фактические параметры.
Глобальные
переменные – это переменные, объявленные в основной программе. Глобальные
переменные доступны как основной программе, так и любой подпрограмме.
Формальные
параметры указываются в заголовках при объявлении подпрограмм. Фактические
параметры указываются в основной программе при вызове подпрограмм.
Формальные
и фактические параметры должны соответствовать друг другу по порядку
следования, по типу и по количеству.
Формальные
параметры могут быть параметрами-значениями, параметрами-переменными
и параметрами-константами.
Группа
параметров, перед которыми в заголовке подпрограммы отсутствуют слова
var и const и за которыми следует их тип, называются параметрами-значениями.
Пример
Procedure
P1(a: real; g:integer);
a, g – параметры-значения.
Группа
параметров, перед которыми в заголовке подпрограммы стоит слово const
или var и за которыми следует их тип, называются соответственно параметрами-константами
и параметрами-переменными.
Пример
Procedure
P2(const x,y: integer);
Function F1(var d, f: real; g: integer): real;
Параметр-переменная
используется, когда значение должно быть передано из подпрограммы
в вызывающий блок. В этом случае при вызове подпрограммы параметр
замещается аргументом переменной, и любые изменения формального параметра
отражаются на аргументе.
Для
параметров-констант и параметров-переменных можно не указывать их
тип. В этом случае программист должен сам интерпретировать типы параметров
в теле процедуры.