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

Объявляется подпрограмма-функция так: 
function <имя функции>(<список аргументов с указанием их типов>):<тип функции>;
var
<раздел переменных функции>
begin
<тело подпрограммы-функции>
end;

Приведем пример подпрограммы-функции, вычисляющей n-факториал(n!): 

    {после ключевого слова function приведено имя функции - "fu", а в круглых скобках указан аргумент- имя переменной "n" и ее тип - "integer"} 
function fu(n: integer):integer;     {сама функция fu также имеет тип "integer"}
var f,i: integer;                 {в разделе var функции определены переменные: f, i}
begin                                 {начало тела подпрограммы-функции fu}
f:=1;
for i:=1 to n do f:=f*i;       {в цикле вычисляем факториал, f}
fu:=f;                                  {фукция возвращает значение факториала}
end;                                     {конец подпрограммы-функции fu}
    {далее- основная программа:}
var                                     {ее раздел var}
n: integer;                         {в котором определяем переменную n}
begin                                  {begin основной программы}
Write(' n='); 
readln(n);                           {считываем вводимое пользователем значение n}
write( n,'!=',fu(n));             {пишем возвращаемое функцией fu(n) значение n-факториала}
end.                                    {конец программы}

Подпрограмма-процедура в Паскале определяется следующим образом: 
procedure <имя процедуры>(<список аргументов с указанием их типов>);
var
<раздел переменных процедуры>
begin
<тело подпрограммы-процедуры>
end;

Приведем пример подпрограммы- процедуры, вычисляющей n-факториал(n!): 

{Процедуры не возвращают в себе никаких значений: они взаимодействуют с вызывающей программой только через передаваемые аргументы. В процедуре fu - два аргумента (параметра): n и f. Параметр f описан с атрибутом var - изменяемый, т.к. процедура передает измененное значение f в вызывающую программу. Параметр n - без атрибута var, поэтому, даже если его значение изменится в процедуре, в основной программе оно останется прежним}
procedure fu(n: integer; var f:integer); {заголовок процедуры fu}
var i: integer;
begin
f:=1;
for i:=1 to n do f:=f*i;
end;                                                        
{конец процедуры fu}
    {далее- основная программа:}
var {ее раздел var}
n, fuctorial: integer;
begin                                                       
{begin основной программы}
Write(' n=');
readln(n);
fu(n,fuctorial);                                        
{!!! обращение к процедуре fu !!!}
write( n,'!=',fuctorial); 
end.

В Паскале разрешена рекурсия- прием программирования, когда в подпрограмме встречается вызов этой же подпрограммы. Приведем пример вычисления факториала в подпрограмме, использующей рекурсивный вызов: 
function f(n: integer):integer; {функция f}
begin
if n=1 then f:=1 else f:=n*f(n-1); 
end;
               
{далее- основная программа:}
var
n: integer;
begin
Write(' n='); readln(n);
write( n,'!=',f(n));
end.

                                << ранее            к оглавлению            далее>>

                      то же на С                        то же на Basic                 то же на Fortran

                аналог на JavaScript
Используются технологии uCoz