Подпрограммы.
Функции
Функции, это такие подпрограммы, результатом которых обязательно является некоторое значение. Описание функции во многом совпадает с описанием процедуры. Но если имя процедуры используется только для её вызова, то с именем функции, кроме того, связывается её результат.
Отличия в описании функций
В описании функции заголовок выглядит следующим образом:
Function Имя (Список формальных параметров): Тип результата;
Как и у процедуры заголовок функции обязателен. Например:
function Chr (X: Byte): Char;
function Odd (X: Longint): Boolean;
function GetX: Integer;
function KeyPressed: Boolean;
Функция предполагает обязательную передачу информации из подпрограммы в программу через имя функции. Поэтому раздел операторов обязательно должен содержать хотя бы один оператор, в котором имени функции присваивается значение результата. В противном случае функция не возвратит результат (вернее возвратит произвольный результат).
Для примера рассмотрим две программы вычисления суммы двух чисел, в которых задача решена в первом случае с помощью процедуры, а во втором - с помощью функции:
Пример 1
--------
PROGRAM Ex_27_1;
USES Crt;
VAR x,y,rez: real;
Procedure Summa (var s: real; a,b: real);
Begin
s:=a+b;
End;
BEGIN
ClrScr;
Write (Введите два числа: ); Readln (x,y);
{Вычисление с помощью процедуры}
Summa (rez,x,y); Writeln (Сумма = ,rez);
Repeat Until KeyPressed;
END.
Пример 2
--------
PROGRAM Ex_27_1;
USES Crt;
VAR x,y,rez: real;
Function Sum (a,b: real): real;
Begin
Sum:=a+b;
End;
BEGIN
ClrScr;
Write (Введите два числа: ); Readln (x,y);
{Вычисление с помощью функции}
rez:=Sum (x,y); Writeln (Сумма = ,rez);
{Непосредственное использование функции в выражениях}
Writeln (Сумма = ,sum (x,y));
Repeat Until KeyPressed;
END.
Как видете, вызов функции в программе тоже отличается от вызова процедуры. Вызов процедуры всегда представляет собой самостоятельный оператор. Функция не может быть самостоятельным оператором. Вызов функции производится:
1. в различных выражениях;
2. только справа от знака присваивания;
3. как элемент вывода в операторе вывода информации.
По способу передачи данных имя функции можно характеризовать как параметр четвёртой категории. С его помощью производится передача информации только в одном направлении, - от подпрограммы к программе. Но собственно параметром (формальным или фактическим) функция не является. Скорее функция похожа на переменную, значение которой зависит только от параметров функции и доступно только для чтения при непосредственном обращении.
Процедура или функция?
Оформлять некоторую программу как функцию целесообразно только в том случае, если ожидается некоторый результат её работы. Если же последовательность команд ориентирована только на выполнение некоторой последовательности действий (вывод на экран, рисование и т.д.), лучше оформить её как процедуру.
Контрольные вопросы
Подпрограммы. Функции (Turbo Pascal 7.0)
Лекции по предмету «Программирование»