Использование подпрограмм является главной особенностью структурного программирования. По сути, подпрограмма представляет собой составной оператор, объединяющий ряд простых операторов. При этом этот «составной оператор» оснащается именем и внешне оформляется как программа. В подпрограмме бывают свои константы, переменные и другие атрибуты полноценной программы. Локальные переменные никак не связаны с одноименными глобальными переменными (относящимися к основной программе).

Зачем нужны подпрограммы? Их использование удобно, когда в программе несколько раз решается одна и та же подзадача, но для разных наборов данных. Кроме того, использование подпрограмм естественно для человека, которому проще воспринимать логически связанные объекты, чем множество разнородных данных.

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

В большинстве языков структурного программирования подпрограммы существуют только в виде функций. В Паскале же их два типа: процедуры ифункции. Их заголовки выглядят соответственно так:

procedure имя (параметры);

function имя (параметры): тип результата;

Между функциями и процедурами есть существенное отличие. Значение, полученное в результате выполнения кода функции, жестко соотносится с ее именем путем присвоения этому имени конкретного значения. Тип, который может принять вычисляемое значение, указывается в заголовке функции (тип результата). И в теле основной программы функция вызывается только в том случае, если ее имя фигурирует в каком-либо выражении. В то время как процедура вызывается отдельно.

Параметры не является обязательным компонентом, однако их использование повышает гибкость процедуры или функции, т.к. они перестают быть привязанными к определенным данным.

Когда процедура или функция вызываются, то в скобках вместо формальных параметров, указав фактические параметры (аргументы). Это могут быть либо конкретные значения, либо переменные из основной программы.

Тело подпрограммы, как и любого составного оператора на языке Паскаль, ограничивается скобками begin и end.

Примеры использования процедуры и функции.

 

procedure box (s: char; w,h: integer);
 var i,j:integer;
 begin
 for i := 1 to h do begin
 for j := 1 to w do
 write (s);
 writeln
 end;
 writeln
 end;
 
begin
 box ('+', 10, 5);
 box ('r', 20, 3);
 box ('|', 50, 10);
 box ('$', 12, 4);
 
readln
end.

 

 

var num: integer;
 
function digits (n:integer): integer;
 var i: integer;
 begin
 i := 0;
 while n > 0 do begin
 n := n div 10;
 i := i + 1
 end;
 
 digits := i
 end;
 
begin
 write ('Введите положительное число: ');
 readln (num);
 
 num := digits (num);
 writeln ('Количество разрядов = ', num);
 
readln
end.