Процедуры.

Понятие подпрограмм в языке Паскаль.

При написании программы может оказаться, что некоторые группы действий повторяются в программе неоднократно, хотя, возможно, и над различными данными. Кроме того, такие однотипные действия могут встречаться в различных программах. Если эти действия имеют законченный смысл, их целесообразно выделить в отельную подпрограмму.

В языке Turbo Pascal существуют 3 типа программных единиц:

- основная программа (начинающаяся заголовком Program),

- функция (заголовок Function),

- процедура (заголовок Procedure).

Два последних типа являются подпрограммами, отдельно они выполняться не могут, а должны вызываться из других программных единиц. Очевидно, что начинаться выполнение может только с основной программы.

Все программные единицы строятся по единому принципу, аналогичному описанному для основной программы. Описание любой подпрограммы должно быть проведено до ее использования в другой подпрограмме или основной программе. Программная единица, в которой производится обращение к подпрограмме, называется вызывающей.

Очевидно, что вызывающая программная единица и подпрограмма должны обмениваться информацией, т.е. часть переменных должна быть доступна в них обеих. Остальные переменные должны быть локализованы в своих программных единицах (быть недоступными из других подпрограмм). Поэтому все переменные, константы, типы данных могут быть или глобальными, или локализованными в программной единице. Метки всегда локальны в каждой подпрограмме. Все переменные основной программы, глобальны по отношению к подпрограммам, описанным в этой программе, если в подпрограммах не заведены (не описаны повторно) переменные с такими же именами.

Процедура представляет собой некоторую последовательность действий, реализующую определенную задачу, причем эту группу действий можно неоднократно вызывать в программе в различных местах. Вызов (обращение к процедуре) осуществляется по имени процедуры, которое должно быть уникальным в программе. Хотя сама процедура при каждом вызове может выполнять фиксированный набор операторов, у нее есть возможность каждый раз обрабатывать новую группу данных. Указания, какие данные требуется обрабатывать при вызове процедуры, передаются ей через механизм параметров.

По своему строению процедура напоминает основную программу, т.к. состоит из заголовка, раздела описаний и выполняемого блока. Описание процедуры должно находиться после других операторов описаний основной (вызывающей) программы перед ее выполняемым блоком. Использование процедуры должно находиться внутри выполняемого блока после описания процедуры. После выполнения всех действий выполняемого блока процедуры в месте ее вызова, управление предается оператору, следующему за вызовом процедуры.

В отличие от основной программы, заголовок процедуры обязателен, он имеет вид:

PROCEDURE <имя процедуры>(<список параметров>);

Раздел описаний процедуры строится как раздел описаний основной программы, с учетом того, что все описанные переменные существуют только во время выполнения процедуры (локальные переменные) и никак не связаны с переменными вызывающей программы. Переменная, описанная в процедуре и такая же переменная (с тем же именем) основной программы представляют две различные ячейки памяти. Следует иметь в виду, что если во внешней программе переменная описана, а в процедуре - нет, ее использование в теле процедуры означает работу с переменной внешней программы (так называемые глобальные переменные). Обычно не рекомендуется использовать глобальные переменные, так как это снижает универсальность процедур и затрудняет отладку программ.

В выполняемом блоке процедуры (который должен быть заключен в скобки Begin .. End), описаны действия, которые при вызове процедуры, будут выполняться над локальными, глобальными переменными (если они есть), и над теми данными, которые будут переданы в процедуру через список параметров. В отличие от основной программы, выполняемый блок заканчивается символом ";", а не точкой.

В блок-схемах алгоритмов обращение к процедуре изображается прямоугольником с двойными вертикальными сторонами и именем процедуры внутри этого прямоугольника: