Структура основной программы с использованием подпрограмм
PROGRAM <имя_программы>;{Заголовок основной программы}
LABEL
CONST
TYPE
VAR
PROCEDURE <имя_процедуры> (<список_формальных_параметров>);
LABEL
CONST
TYPE
VAR
BEGIN
{тело процедуры}
END;
FUNCTION <имя_функции> (<список_формальных_параметров>): <тип_возвращаемого_результата>;
LABEL
CONST
TYPE
VAR
BEGIN
{тело функции}
END;
BEGIN
{тело основной программы}
END.
Область видимости идентификатора переменной
Область действия описания конкретного идентификатора и называется областью видимости.
Все переменные и другие объекты, описанные в подпрограмме, являются локальными и действуют только внутри этой программы. Никакой связи между ними и объектами вызывающей программы, имеющими такие же имена, нет.[†]
В подпрограммах в свою очередь можно использовать идентификаторы, описанные только в вызывающей программной единице. Смысл и значение этих идентификаторов одинаков и в вызывающей и в вызываемой программной единице. Такие идентификаторы называются глобальными. Другими словами, глобальными называются переменные, описанные в основной, то есть главной, программе.
Примечание. Использование глобальных переменных в подпрограммах следует избегать. Во-первых, потому что подпрограмма становится менее универсальной, и могут возникнуть трудности при переносе её в другую программу, где необходимо тщательно проследить за обменом данными между программными единицами с помощью глобальных переменных. И, во-вторых, возрастает риск ошибок, вызванных, например, неучтённым изменением значения глобальной переменной в теле подпрограммы.
Например,
Program primer1;
Var
i: integer; {объявление глобальной переменной}
{объявление процедуры}
Procedure P; {заголовок процедуры}
Var
i: integer; {объявление локальной переменной}
Begin {начало тела процедуры}
Writeln (“Значением переменной i является цифра - ”, i);
End; {конец тела процедуры}
Begin {начало тела основной программы}
I := 1;
P; {вызов процедуры}
End. {конец тела процедуры}
В результате запуска программы Primer1 на экран монитора будет выведена строка:
Значением переменной i является цифра – 1
Подпрограммы - процедуры (PROCEDURE)
Процедура – это подпрограмма, которая решает некоторую частную задачу. Результатом работы процедуры является либо одно или более значений, либо ни одного. Например, процедура CLRSCR; ни чего не возвращает программе, которая её вызывает. А процедура READLN(a) возвращает основной программе значение переменной A, введённое пользователем с клавиатуры.
Процедура оформляется аналогично программе, то есть содержит заголовок, раздел описаний и операторов:
{заголовок процедуры}
PROCEDURE <имя_процедуры> (<список_формальных_параметров>);
{раздел описаний}
BEGIN
{раздел операторов}
END;
Здесь, <имя_процедуры> - имя процедуры удовлетворяет всем правилам идентификатора; формальные («ненастоящие») параметры – список переменных с указанием их типа.
Например (см. Задача 1).
…
Procedure Dlina (x1, x2, y1, y2 : real; var l : real);
…
Вызов процедуры:
<имя_процедуры> (<список_фактических_параметров>);
Здесь, фактические («настоящие») параметры – параметры вызывающей программы.
Например (см. Задача 1).
…
Dlina (q1, q2, k1, k2, d);
…