Персональная страничка
Диканева Тараса
Викторовича

Главная \ Преподавательское \ Программирование для начинающих

11. Процедуры и функции

Предыдущий раздел:

Следующий раздел:

11.8. Функции

Желаемым результатом работы подпрограммы может быть всего одно значение. Так, например, было в примере с расчетом суммы элементов массива. В этом случае вместо процедур разумно использовать другой вид подпрограмм, а именно функции.

Пример 1: Функция, вычисляющая сумму своих аргументов.

  function Sum(a, b: real): real;
  begin
    Sum:=a+b;
  end;

Мы видим, что структура функции почти повторяет структуру процедуры. Отличия:

1) Вместо слова procedure пишется слово function.

2) После списка параметров через двоеточие указывается тип значения, которое получится в результате работы функции.

3) В теле функции должно присутствовать присваивание значения идентификатору функции (Sum:=a+b). Это и будет значением функции.

Вызов функции из программы происходит также, как и в случае со стандартными функциями, таким как sqr, sqrt, random, sin, round и т.д. То есть их значения можно присваивать переменным или использовать их в выражениях. Например, в программе могли бы стоять вызовы:

  x:=sum(2, 2);
  z:=sum(x, y);
  x:=2*sum(x, y)+1;
  z:=sqrt(sum(sqr(x), sqr(y)));
  z:=sum(sum(x, y), z);

и т.п.

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

  sum(2, 2);

и все. Созданное функцией значение в этом случае никуда не запишется. Попросту пропадет. Впрочем, функция может сделать еще что-нибудь полезное. Например, изменить один из своих параметров-переменных или глобальную переменную. Так что такой процедуроподобный вызов может иметь смысл.

Правила передачи параметров те же самые, что и для процедур. Также можно описывать локальные переменные.

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

Пример 2: Функция, вычисляющая сумму элементов массива.

  {Пусть  описан тип-массив}
  const
    N = 10;
  type
    TArray = aray [0..N-1] of real;

    ...

  {Тогда функция, вычисляющая сумму его элементов, выглядит так}
  function ArraySum(var a: TArray): real;
  var
    s: real;
    i: integer;
  begin
    s:=0;
    for i:=0 to N-1 do
      s:=s+a[i];
    ArraySum:=s;
  end;

Следующий раздел:

Предыдущий раздел:

2 комментария

  1. Alex_Kot

    Пример2 в Borland Paskal ? Может быть в ABC.net надо как и было ранее:

    function ArraySum(var a: TArray): real;
    var
    i: integer;
    s: real;
    begin
    s:=0;
    for i:=0 to N-1 do
    s:=s+a[i];
    ArraySum:=s;
    end;

  2. Taras

    Действительно, так лучше. Спасибо.

Добавить комментарий