При разработке программы иногда появляются повторяемые группы действий или возникает необходимость расчленить программу на функциональные модули, сделать ее структуру иерархической. Для этого во всех языках программирования существуют средства организации подпрограмм. Для решения сложной задачи рекомендуется сначала алгоритм, а затем и программу разрабатывать «сверху вниз», от более общего плана к детальному. В таком виде главная программа соответствует укрупненному плану решения задачи, а ее команды — вызову соответствующей подзадачи, реализованной в виде подпрограммы. Идя по такому пути создания программы, можно отдельные мелкие функции реализовывать сначала в виде небольших подпрограмм, проверять их на контрольных примерах и, только убедившись в правильности работы, включать в состав основной программы. Это удобнее проделывать, имея в распоряжении язык, позволяющий полностью выделить подпрограмму из текста основной программы в виде отдельного модуля. Использование подпрограмм дает возможность разрабатывать программу по частям, поручать реализацию больших проектов группам разработчиков. В состав групп входят специалисты данной науки или производства, из области которой решается задача, разрабатывающие алгоритм и структурирующие данные, а также программисты, объединяющие алгоритм и данные в программе для компьютера.
В Паскале подпрограмма является частью основной программы, ее описание располагается между разделомvar главной программы и ее программным блоком (первымbegin).Подпрограмм может быть несколько, их описания располагаются в произвольном порядке одно за другим. Описание подпрограммы можно сравнить с записываемой в математике формулой «в общем виде», в которую при расчетах подставляются конкретные значения. Поскольку далеко не каждую задачу удается свести к некоторой формуле, но всегда можно записать алгоритм ее решения, подпрограмма — это та же инструкция по решению некоторой задачи. Как и формула, подпрограмма используется для различных данных, передаваемых из главной программы или других подпрограмм.
Подпрограмма — это специальным образом оформленный алгоритм, который может многократно использоваться при решении более общей задачи.
В Паскале различают два вида подпрограмм:процедуры и функции. Основное различие между ними заключается в том, что процедура получает в результате своей работы любое количество данных, а функция — только одно значение.
Подпрограммы имеют структуру, аналогичную главной программе. Они содержат заголовок со специальным словом — признаком подпрограммы, имя и, при необходимости, списки передаваемых на обработку и получаемых из подпрограммы данных. Затем могут располагаться все имеющиеся в главной программе разделы описаний: меток, констант, типов и переменных. В этих разделах описываются данные, используемые только внутри подпрограммы и являющиеся промежуточными при ее выполнении. Такие данные называютсялокальными. В подпрограмме могут участвовать переменные, описанные в главной программе. Эти данные называютсяглобальными, ихзначения и подпрограмма, и главная программа берут из общей памяти.
При работе с подпрограммой всегда выделяется два этапа: описание подпрограммы, т. е. запись алгоритма решения задачи в специальной форме, и вызов подпрограммы — передача ей данных на обработку из вызываемой программы, которая, в свою очередь, может быть подпрограммой, и получение обратно результатов.
Рассмотрим способы организации подпрограмм в Паскале.
Процедура — подпрограмма, имеющая любое количество входных и выходных данных. Процедура может быть описана без параметров и с параметрами. Параметры — это данные из заголовка процедуры, как передаваемые ей на обработку, так и получаемые в виде результатов. Таким образом, с помощью параметров происходит обмен информацией между процедурой и вызывающей ее программой.