Шаг 16.
Описание процедур и функций

    На этом шаге мы рассмотрим правила задания процедур и функций.

    Процедуры и функции состоят из операторов, локальных данных и внутренних процедур и функций. Структура описания процедуры и функции имеет следующий вид:

procedure  <Имя> (<СписокФормальныхПараметров>);
label      // Описание локальных меток,
const      // констант,          
type       // типов и      
var        // переменных. 
procedure  //   Описание внутренних 
function   // процедур и функций. 
begin  
   <Операторы> 
end;

   

function <Имя>   (<СписокФормальныхПараметров>):   <ТипРезультата>;
label      // Описание локальных меток,
const      // констант,
type       // типов и
var        // переменных.
procedure  // Описание внутренних
function   // процедур и функций.
begin 
  <Операторы, среди которых должен быть хотя бы один, 
      который присваивает имени функции значение результата>
end;

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


    Пример. Дан одномерный массив размерностью n, элементами которого являются действительные числа. Найти сумму элементов вектора.

    Для решения задачи сделаем следующие описания:

const	
    n = 20; //Длина массива.
type		
   TVector = array [l..n] of Real;
var		
   Vector : TVector;
    i         : Integer;

    Процедуру, решающую поставленную задачу, можно записать следующим образом:

procedure Summa   (Vec:   TVector;   Len:  Integer;  var  Sum:   Real) ;
var
    i  : Integer;
   S  : Real;
begin
    S := 0;
   for i := 1   to Len  do S := S  + Vec [i];
   Sum := S;
end;

    Обратим внимание, что вызов процедуры выполняется отдельным оператором:

    Summa (Vector, n, MySumma );

    Решение той же задачи, оформленное в виде функции можно представить так:

function Summa ( Vec   :  TVector; Len  : Integer  ): Real;
var		
    i  :  Integer;	
   S :   Real;		
begin		
   S := 0;		
   for i :=  1  to Len  do	
       S := S + Vec[i];	
   Summa  :=  S; // Присваивание имени функции  значения 
                 // результата  является  обязательным  оператором в теле функции.
end;		

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

    MySumma := Summa (Vector, n);

    На следующем шаге мы рассмотрим описание экспорта.




Предыдущий шаг Содержание Следующий шаг