Персональная страничка
| ||
Предыдущий раздел:
Следующий раздел:
Желаемым результатом работы подпрограммы может быть всего одно значение. Так, например, было в примере с расчетом суммы элементов массива. В этом случае вместо процедур разумно использовать другой вид подпрограмм, а именно функции.
Пример 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 в 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;
Действительно, так лучше. Спасибо.