Для более эффективного программирования (минимум строк) подобные повторения необходимо оформить в виде подпрограмм (процедур).
При этом повторяющаяся группа операторов оформляется по соответствующим правилам в отдельную самостоятельную программу (программную единицу), которая и называется подпрограммой. Таким образом, общая программа будет состоять из головной программы и подпрограмм.
При этом из головной программы осуществляется многократное обращение (ссылка) к данной подпрограмме.
Ссылка к подпрограмме осуществляется по соответствующим правилам, изложенным ниже.
Таким образом, использование аппарата подпрограмм позволяет сократить объем и улучшить структуру программы с точки зрения наглядности и читаемости, а также уменьшить вероятность ошибок и облегчить процесс отладки программы.
При таком разложении программы на взаимосвязанные, но замкнутые и логически завершенные единицы дает возможность выполнять разработку отдельных подпрограмм разным «программистам» и более или менее независимо друг от друга. Кроме того, подпрограмма может рассматриваться как самостоятельный программный модуль с входными и выходными данными.
В языке PASCAL подпрограммы реализуются в виде процедур и функций, которые вводятся в головную программу с помощью соответствующих описателей.
ПРОЦЕДУРЫ
Процедурой в TURBO PASCAL называют особым образом оформленный фрагмент программы, имеющей собственное имя. Упоминание особым образом этого имени в тексте основной программы приводит к «активизации» процедуры, называют ее вызовом. Сразу после обращения к процедуре (ее вызову), начинают выполняться операторы, входящие в нее, после выполнения последнего из них управление автоматически возвращается обратно в основную программу и выполняются операторы, стоящие непосредственно после оператора вызова процедуры.
Для наглядности это можно проиллюстрировать следующим рисунком:
ОСНОВНАЯ (ГОЛОВНАЯ) ПРОГРАММА |
ВЫЗОВ ПРОЦЕДУРЫ |
ПРОЦЕДУРА |
ПРОДОЛЖЕНИЕ ПРОГРАММ |
. |
. |
. |
END |
Рис. 4.2.5. Схема взаимосвязи головной программы и |
процедуры. |
Следует отметить, что данная схема односторонне демонстрирует структуру головной программы и процедуру. Существуют более сложные программы, состоящие из нескольких процедур, каждая из которых осуществляется многократное обращение (вызов) из головной программы. Для обмена информаций (данными) между основной программой и процедурой используется так называемые фактические и формальные параметры.
Следует отметить, что с примерами процедур и функций мы уже сталкивались – это стандартные процедуры ввода и вывода данных, оформленные следующими операторами: READ, READLN, WRITE, WRITELN, а также набор стандартных функций. В этом случае стандартными они называются потому, что созданы одновременно и совместно со всеми элементами системы TURBO PASCAL и является ее неотъемлемой частью. Таким образом, в TURBO PASCAL имеется много стандартных процедур и функций. Наличие такой так называемой библиотеки готовых программных заготовок существенно облегчает разработку прикладных инженерных программ. Однако в большинстве случаев многие специфичные для данной прикладной программы действия не находят прямых аналогов в библиотеке TURBO PASCAL и тогда программисту приходится разрабатывать свои нестандартные процедуры и функции. Данные нестандартные процедуры и функции необходимо обязательно описать в начале программы, чтобы компилятор мог установить связь между оператором вызова и теми действиями, которые приводят к процедуре или функции.
Таким образом, любая процедура состоит аналогично основной программе, из заголовка процедуры, описателя и следующего за ним операторного блока. Заголовок процедуры можно представить в общем виде, как:
Procedure_{имя}_(список параметров);
где Procedure – обязательное служебное слово; имя – имя процедуры через пробел, оформляется по правилу построения имени идентификатора; список параметров
– перечень имен через запятую для обозначения исходных данных и результатов работы процедуры с указанием их типов. Параметры, перечисленные в данном списке называются формальными. Такое оформление заголовка осуществляется с использованием соответствующих правил, которые продемонстрируем на следующем примере:
Procedure_com (a:real; b:integer);
Как видно, параметры в списке отделяются точкой с запятой. Если имеется несколько следующих друг за другом однотипных параметров, то их можно отделить запятыми:
Procedure_com (a:real; b:real; c:real);
Можно записать проще:
Procedure_com (a, b, c:real);
Что касается следующего за заголовком блока, то он должен состоять из раздела описаний (var) и раздела операторов, заключенным в операторные скобки beginend. Заканчиваться блок должен End и точкой с запятой.
Прежде чем переходить к составлению программы в целом необходимо остановиться на вопросе обращения к процедуре из головной программы. Дело в том, что описание процедуры или функции, расположенные в разделе описаний головной программы само по себе, ни какого действия не
вызывает. Чтобы исполнить процедуру или функцию необходимо в нужном месте головной программы поместить обращение к ней. Обращение к процедуре производится с помощью каких-либо из ранее изученных операторов, в которых необходимо указать имя процедуры. Такое обращение из головной программы в общем виде можно представить:
<какой-либо оператор> <имя процедуры> <список фактических параметров>;
В то же время вызов процедуры можно осуществить без оператора, указав в нужной точке программы имя процедуры, например:
<имя процедуры>< список фактических параметров>
В данном случае в качестве фактических параметров могут выступать конкретные числовые значения, переменные (последние переменные должны в головной программе получить числовые значения, например с помощью оператора read или арифметического оператора присваивания) или арифметическое выражение, которое в результате вычисления должно получить конкретное числовое значение.
Таким образом, из изложенного ясно, что фактические параметры реализуются в головной программе, а формальный в процедуре. Сам механизм замены формальных параметров позволяет нужным образом настроить алгоритм, реализованный в процедуре. TURBO PASCAL «следит» за тем, чтобы количество и тип формальных параметров строго