- •Лекция 18-19 Процедуры и функции
- •1. Процедура
- •2. Функция
- •3. Формальные и фактические параметры
- •3.1. Параметры-значения
- •3.2. Параметры-переменные
- •3.3. Параметры-константы
- •3.4. Параметры без типа
- •3.5. Массивы и строки открытого типа
- •3.6. Параметры-процедуры и параметры-функции
- •4. Процедура exit
- •5. Директивы подпрограмм
- •6. Рекурсивные процедуры и функции
2. Функция
Подпрограмма-функция предназначена для вычисления какого-либо параметра.
У этой подпрограммы два основных отличия от процедуры:
А) Первое отличие функции в ее заголовке. Он состоит из слова function, за которым следует имя функции, далее в круглых скобках - список формальных параметров, затем через двоеточие записывается тип функции - тип возвращаемого параметра.
Функция может возвращать параметры следующих типов:
-любого порядкового,
-любого вещественного,
-стандартного типа string,
-любого указателя, в том числе и типа PChar.
Б) Второе отличие заключается в том, что в теле функции хотя бы раз имени функции должно быть присвоено значение.
Пример. Функция вычисления факториала числа N.
function Factorial(N: Byte): Longint; var Fact: Longint; i: Byte; begin Fact := N; for i : = N-l downto 2 do Fact: = Fact * i; Factorial:= Fact end;
Если имя функции внутри ее описания используется не в левой части оператора присваивания, то это означает, что функция вызывает себя рекурсивно.
Для вызова функции из основной программы или другой подпрограммы следует в выражении, где необходимо использовать значение функции, указать имя функции со списком фактических параметров, которые должны совпадать по количеству и типам с формальными параметрами функции, например:
Part:=Sqr(T)/Faktorial(i);
В этом операторе:
Sqr(T) - вызов стандартной функции возведения в квадрат с фактическим параметром Т;
Faktorial(i) - вызов функции, вычисляющей факториал с фактическим параметром i.
3. Формальные и фактические параметры
Формальные параметры подпрограммы указывают, с какими параметрами следует обращаться к этой подпрограмме (количество параметров, их последовательность, типы).
Они задаются в заголовке подпрограммы в виде списка формальных параметров, разбитого на группы, разделенные точками с запятыми.
В группу формальных параметров включаются однотипные параметры одной категории.
Все формальные параметры можно разбить на четыре категории:
параметры-значения (эти параметры в основной программе подпрограммой не меняются);
параметры-переменные (эти параметры подпрограмма может изменить в основной программе);
параметры-константы (используются только в версии 7.0);
параметры-процедуры и параметры-функции (т. е. процедурного типа).
Для каждого формального параметра следует указать имя и, как правило, тип, а в случае параметра-переменной или параметра-константы - его категорию.
Имена параметров могут быть любыми, в том числе и совпадать с именами объектов программы. Необходимо лишь помнить, что в этом случае параметр основной программы с таким именем становится недоступным для непосредственного использования подпрограммой.
Тип формального параметра может быть практически любым, однако в заголовке подпрограммы нельзя вводить новый тип.
Например, нельзя писать
function Max(A: array[1..100] of Real): Real;
Чтобы правильно записать этот заголовок, следует в основной программе ввести тип-массив, а затем использовать его в заголовке:
type tArr = array[1..100] of Real;
function Max(A: tArr): Real;
При обращении к подпрограмме формальные параметры заменяются на соответствующие фактические вызывающей программы или подпрограммы.