Функции Паскаль

Структура, назначение и применение подпрограмм. Параметры и аргументы, области действия имён. Процедурный тип данных.
Подпрограммы
Весьма поэтичное объяснение понятия подпрограмма дал В. Ф. Очков: «Подпрограмма — это припев песни, который поют несколько раз, а в текстах песен печатают только один раз».
В самом деле, если есть необходимость многократно совершать одни и те же действия, то вполне логично описать их единожды, а потом лишь ставить на них ссылку. Именно такой смысл имеет использование подпрограмм.
С математической же точки зрения любая подструктура — это замкнутая часть целого, которую можно рассматривать как самостоятельную структуру: подмножество является множеством, подгруппа — группой, подалгебра — алгеброй, подпространство — пространством и т.д.
Таким образом, подпрограмма — это в первую очередь программа. Со всеми полагающимися атрибутами: именем, разделами описания меток, констант, типов, переменных и даже со своими (вложенными) и .
В языке Pascal имеется два вида подпрограмм: и . Описывая их общие черты, мы будем употреблять обобщённый термин «подпрограмма». Если же в тексте встретятся слова «» или «», то это будет означать, что излагаемая информация свойственна только одному конкретному виду подпрограмм: либо только, либо только .
Объявление и описание
Подпрограммы объявляются и описываются в начале Pascal–программы, до ключевого слова begin, означающего начало тела программы.
Различия между и начинаются уже с момента их объявления.
Объявление
объявляются следующим образом:
function :;
В отличие от констант и переменных, объявление подпрограммы может быть оторвано от её описания. В этом случае после объявления нужно указать ключевое слово :
function :; forward;
следует объявлять так:
procedure ;
Если объявление оторвано от её описания, нужно поставить после него ключевое слово :
procedure ; forward;
Описание подпрограммы
Описание подпрограммы должно идти после её объявления. Оно осуществляется по следующей схеме (единой для процедур и функций):
[ uses ;] [ label ;] [ const = ;] [ type = ;] [ var : ;] [ procedure ] [ function ;] begin {начало тела подпрограммы} end; (* конец тела подпрограммы *)