Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Алгор_ТХТК_пособие.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
1.6 Mб
Скачать

6.2 Функции

Функция — это независимый программный блок (программная единица), который позволяет получить только один результат.

Примером являются стандартные функции Паскаля. Имеется возможность писать свои функции. Располагаются они в программе так же, как процедуры: после описания данных и перед операторами.

Program

Const

Var

. . . . .

Функция_1

. . . . .

Функция_n

Begin { Начало основной программы }

. . . . . .

End.

Функция оформляется так же, как процедура. Отличие имеется в заголовке и способе передачи результата. В общем виде функция оформляется так:

Function Имя(формальные_параметры):Тип_Результата;

Описание локальных переменных

Begin

. . . .

Имя := Выражение;

. . . .

End;

Формальные параметры – это аргументы функции. Они могут отсутствовать. Результат передается через имя функции, поэтому в заголовке указывается тип результата. По этой же причине среди операторов в теле функции должен быть хотя бы один, в котором имени функции присваивается значение. Именно это значение и будет возвращено функцией в качестве результата.

Например, оформить в виде функции операцию возведения вещественного числа в целую степень.

Function Stepen(x:Real;n:Integer):Real;

Var

I:Integer;

P:Real;

Begin

If X = 0 Then

If n = 0 Then

Stepen := 1

Else

Stepen := 0

Else

If n = 0 Then

Stepen := 1

Else

If n > 0 then

Begin

P := 1;

For i := 1 to n do

P := P*X;

Stepen := P;

End

else

Begin

P:=1;

For i := 1 to Abs(n) do

P := P/X;

Stepen := P;

End;

End; { Stepen }

Для вычисления значения функции с конкретным параметром ее, как и процедуру, вызывают из основной программы с указанием фактических параметров–аргумен­тов. В отличие от процедуры имя функции может встречаться в выражениях в качестве операнда. Когда выражение вычисляется, функция выполняется и значением операнда становится величина, возвращаемая функцией.

Формальные параметры функции могут быть только параметрами–значениями. При ее вычислении они не изменяются. Аргументы функции могут быть любых типов:

1) скалярные — числа, символы, булевские;

2) Массивы;

3) другие типы.

Сама функция (результат) имеет только скалярный тип, (т.е. число - целое или вещественное, а также символ или булевская переменная).

При обращении к функции (вызове ее) на место формальных параметров подставляются фактические, как в процедуре. Типы, количество и порядок следования фактических и формальных параметров должны совпадать.

В теле функции могут использоваться (вызываться) и другие функции, стандартные или написанные пользователем.

Например, вычислить гиперболический синус по формуле:

Sinh(x) = (ex – e-x)/2

Функция будет иметь вид

Function Sinh(X:Real):Real;

Begin

Sinh := (Exp(X)-Exp(-X))/2;

End;

К функции можно обращаться из основной программы; из другой функции и из самой себя.

Функции, которые вызывают сами себя, называются рекурсивными. Такие функций часто встречаются в математике, например, вычисление факториала, возведение числа в целую степень, вообще, нахождение любых значений методом математической индукции. Так, факториал вычисляется по формуле:

n! = n*(n -1)! - при n>0 и

n! = 1 - при n=0.

Для рекурсивных функций необходимо вырабатывать условие завершения (иначе произойдет зацикливание). Это условие для n! записано во второй строчке (при n=0) – так как рекурсия производится на основе второго сомножителя - (n-1)!=(n-1)*(n-2)! и т.д. - до нуля.

Запишем рекурсивную функцию вычисления факториала.

Function Fact (N:Integer):Integer;

Begin

If N=0 Then

Fact := 1

Else

Fact := N*Fact(N-1);

End;

Пример 6.5 Найти сумму элементов в нескольких массивах.

Program Count_Sum;

Const

Nmax = 200;

Type

Mas = Array[1..Nmax] Of Real;

Var

A,B : Mas;

Suma,Sumb : Real;