Подпрограммы.
Функции
Функции, это такие
подпрограммы, результатом которых обязательно является некоторое значение.
Описание функции во многом совпадает с описанием процедуры. Но если имя
процедуры используется только для её вызова, то с именем функции, кроме
того, связывается её результат.
Отличия в описании
функций
В описании функции
заголовок выглядит следующим образом:
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.
Как видете, вызов функции в
программе тоже отличается от вызова процедуры. Вызов процедуры всегда
представляет собой самостоятельный оператор. Функция не может быть
самостоятельным оператором. Вызов функции производится:
- в различных выражениях;
- только справа от знака присваивания;
- как элемент вывода в операторе вывода
информации.
По способу передачи данных имя функции можно
характеризовать как параметр четвёртой категории. С его помощью производится
передача информации только в одном направлении, - от подпрограммы к
программе. Но собственно параметром (формальным или фактическим) функция не
является. Скорее функция похожа на переменную, значение которой зависит
только от параметров функции и доступно только для чтения при
непосредственном обращении.
Процедура или функция?
Оформлять некоторую
программу как функцию целесообразно только в том случае, если ожидается
некоторый результат её работы. Если же последовательность команд
ориентирована только на выполнение некоторой последовательности действий
(вывод на экран, рисование и т.д.), лучше оформить её как процедуру.
Контрольные вопросы
- Назовите основные отличия в описании процедур и
функций.
- Каким образом производится вызов функции в
программе?
- Что лучше процедура или функция?
Задания для
самостоятельного выполнения
- Определить значение выражения m(a,b,c)+m(b,c,d)+m(c,d,a)
для вещественных a,b,c,d где m(x,y,z) - функция определения минимального
из трёх чисел.
- Даны действительные x,y. Определить u = min(x,y),
v = min(xy,x+y), z = min(u+v^2, 3.14).
- Даны действительные a, b, c. Получить
max(a,a+b) + max(a,b+c)
Получить -----------------------
1 + max(a+bc,1.15)
- Даны действительные числа s,t. Получить g(1.2,-s)
+ g(t,s) - g(2s-1,st)
a^2 + b^2
где g(a,b) = --------------------.
a^2 + 3ab + 3b^2 + 4
- Даны действительные s,t. Получить f(t,-2s,1.7)
+ f(2.2,t,s-t),
2a - b - sin(c)
где f(a,b,c) = ---------------.
5 + ¦c¦
- Даны действительные a,b,c.
g(a,b) cos(x+y) cos(x-y)
Получить g(a,c) * ------, где g(x,y) = -------- * --------
g(b,c) sin(x+y) sin(x-y)
- Даны целочисленный массив мas из 10 элементов.
Определить
t(mas) + 98
------------- * t(mas),
t(mas) - 98
где t(mas) - среднее арифметическое элементов
массива.
- Даны строки символов a, b. Определить max(f(a),5)*max(f(b),10),
где f(s) - количество пробелов в строке.
- Напишите функцию преобразования градусной меры
в радианную.
- Напишите функцию преобразования времени
выраженного в сутках, часах, минутах и секундах просто в секунды.
НАЗАД
ДАЛЕЕ
|