Функции предназначены для вычисления какого-либо параметра. Отметим два основных отличия от процедуры
- заголовок состоит из зарезервированного слова function, за ним в круглых скобках – список формальных параметров, затем через двоеточие записывается тип функции - тип возвращаемого параметра;
функция может возвращать параметры следующих типов: любого порядкового, любого вещественного, стандартного string, любого указателя, в том числе тип Pchar.
- в теле функции хотя бы раз имени функции должно быть присвоено значение.
Пример Функция вычисления факториала числа n.
function factorial (n: Byte): longint;
var fact:longint;
i:byte;
begin
fact:=n;
for i:=n-1 downto 2 do
fact:=fact*i;
factorial:=fact;
end;
Для вызова функции из основной программы или другой подпрограммы следует в выражении, где необходимо использовать значение функции, указать имя функции со списком фактических параметров, которые должны совпадать по количеству и типам с формальными параметрами функции.
Пример
Part: =sqr (t)/factorial (i),
где
sqr (t) – вызов стандартной функции возведения в квадрат с фактическим параметром t;
factorial (i) - вызов функции, вычисляющей факториал с фактическим параметром i.
Формальные и фактические параметры
Формальные параметры указывают, с какими параметрами следует обращаться к этой подпрограмме (количество, их последовательность, типы). Они задаются в заголовке подпрограммы в виде списка формальных параметров. Список разбит на группы, разделенные точками с запятыми. В группу вкладываются однотипные параметры одной категории.
Все формальные параметры разбиты на 4 категории:
- параметры-значения (в основной программе эти параметры подпрограммой не меняются);
- параметры-переменные (эти параметры подпрограмма может изменить в основной программе);
- параметры-константы (только в Borland Pascal 7.0);
- параметры-процедуры и параметры-функции (процедурного типа).
Для каждого формального параметра следует указать имя и, как правило, тип.
Для параметра-переменной или параметра-константы – его категории. Имена параметров могут быть любыми, они могут совпадать с именами объектов программы.
В этом случае параметр основной программы с таким именем становится недоступным для непосредственного использования подпрограммой. Тип формального параметра может быть любым, но в заголовке подпрограммы нельзя вводить новый тип.
Пример
Неправильно:
function max (a: array [1..00] of real):real;
Правильно:
type
tArr = array [1..100] of real;
function max(a:tArr):real;
При обращении к подпрограмме формальные параметры заменяются на соответствующие им фактические параметры программы или подпрограммы.