Вывод подпрограммы осуществляется простым упоминанием имени процедуры в операторе вызова процедуры или именем функции в выражении. Каждая процедура или функция описывается в разделе объявлений (заголовок и тело). В заголовке объявляются – имя и формальные параметры. За заголовком следует тело подпрограммы. В разделе объявления подпрограмм могут быть описаны подпрограммы низшего уровня, в них – описание других подпрограмм (вложенные подпрограммы).
Пример Структура вложенной программы.
program first;
procedure A;
procedure A1;
. . . . . . . . . . .
begin
. . . . . . . . . .
end; {A1}
procedure A2;
. . . . . . . . . . . .
begin
. . . . . . . . . .
end; {A2}
begin {A};
. . . . . . . . . . . .
end; {A}
procedure B;
procedure B1;
begin
. . . . . . . . . . .
end; {B1}
procedure B2;
procedure B21;
……………
Все имена, описанные внутри подпрограммы, локализуются в ней, т.е. они «невидимы» снаружи. Другими словами, из основной программы можно обращаться к процедурам А и В, но нельзя вызвать вложенные процедуры А1, А2, В1, В2, В21, В22. Это относиться не только к именам подпрограмм, но и к любым именам, объявленных в них (типам, константам, переменным и меткам). Все имена в пределах подпрограммы, в которой они объявлены, должны быть уникальными и не могут совпадать с именем самой подпрограммы. При входе в подпрограмму низшего уровня становятся доступны не только объявленные в ней имена, но и сохраняется доступ ко всем именам верхнего уровня. Из подпрограммы В21 можно вызвать подпрограмму А, используя имена, объявленные в основных подпрограммах, в подпрограмме В и В2 и затем обращаться к ним.

Пример