6.5.1. Использование процедур и функций в программах
Чтобы программы было проще понимать и записывать, следует делать их более компактными. Для этого в языке программирования Turbo Pascal имеются средства, позволяющие разбивать программу на логически связанные блоки (подпрограммы), каждый из которых решает некоторую подзадачу и могут выполняться в программе неоднократно. Это процедуры и функции.
Процедуры и функции – это законченные программные единицы, имеющие собственное имя, которые решают некоторую подзадачу.
Процедуры и функции помещаются в раздел описаний программы сразу же после описания переменных и перед словом Begin, указывающим начало ее основной части.
Структура описания процедур и функций до некоторой степени похожа на структуру программы: у них также имеются заголовок, раздел описаний и исполняемая часть. Более подробно структура процедуры рассмотрена в п. 6.5.2, а функции в п. 6.5.3. Раздел описаний содержит те же подразделы, что и раздел описаний программы: описания констант, типов, меток, переменных. Исполняемая часть содержит собственно операторы процедуры или функции.
Если две подпрограммы, описанные на одном уровне, содержат взаимные вызовы друг друга, то используется механизм предварительных описаний.
Предварительное описание содержит заголовок подпрограммы, а вместо тела записывается служебное слово Forward. В этом случае заголовок полного описания может быть записан без списка параметров и (для функций) без типа результата.
Процедуры и функции различаются назначением и способом использования.
На вход подпрограммы в качестве исходных данных поступает совокупность параметров – аргументов, а на выходе формируются параметры – результаты. Причем процедура позволяет получить один или несколько результатов, а функция – только один.
Для обмена информацией между процедурами и функциями и другими блоками программы существует механизм входных и выходных параметров. Входными параметрами называют величины, передающиеся из вызывающего блока в подпрограмму (исходные данные для подпрограммы), а выходными - передающиеся из подпрограммы в вызывающий блок (результаты работы подпрограммы).
Одна и та же подпрограмма может вызываться неоднократно, выполняя одни и те же действия с разными наборами входных данных. Параметры, использующиеся при записи текста подпрограммы в разделе описаний, называют формальными, а те, что используются при ее вызове – фактическими.
Формальные параметры в заголовке процедур и функций записываются в виде и отделяются друг от друга точкой с запятой:
var имя параметра: имя типа
Ключевое слово var может отсутствовать. Если параметры однотипны, то их имена можно перечислять через запятую, указывая общее для них имя типа. При описании параметров можно использовать только стандартные имена типов, либо имена типов, определенные с помощью команды type. Список формальных параметров может отсутствовать.
Допустимы способы задания формальных параметров:
1. Параметры-значения – параметры, перед которыми отсутствует служебное слово Var и за которыми следует идентификатор типа.
Это наиболее распространенный и простой способ. Параметр - обычная локальная переменная. Любые действия внутри подпрограммы никак не отражаются на значениях переменной вне подпрограммы.
2. Параметры-переменные – параметр, перед которым ставиться слово Var и далее тип.
Передаются по ссылке. Способ используется, когда необходимо передать некоторое значение в точку вызова подпрограммы. В этом случае формальные параметры считаются синонимами соответствующих фактических параметров.
При этом фактические параметры должны быть переменными (не выражениями) того же типа, что и формальные параметры.
Переменные файловых типов могут передаваться в подпрограмму только как параметры - переменные.