Материал: Алгоритмический язык Turbo Pascal 7.0. Юршин Е.Д., Рог А.И

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Функции.

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

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

Отличие заключается в том, что имя функции обязательно должно иметь соответствующий тип; функция должна быть только в составе какого-либо оператора(например, в составе арифметического оператора и оператора вывода данных); параметр(переменная), с которым необходимо выходить из подпрограммы , в данном случае должен быть присвоен функции; вместо служебного слова Pocedure должно использоваться служебное слово Function.

В качестве примера использования функции возьмем вышеприведенную процедуру step1 вместе с головной программой step4 и преобразуем ее путем замены процедуры на функцию.

Procedure Step;

Var

M:integer;

A,z:real;

Function Step1(n:integer;x:real):real;

Var

I:integer;

Y:real;

Begin

Y:=1;

For i:=1 to n do

Y:=y*x;

Step1:=y;

End;

Begin

Read(a,m)

If m=0

Then z:=1

Else if m>0

Then z:=Step1(m,a)

Else z:= step1(m,1/a);

Write(z);

End.

Недостатком предыдущей программы возведения в степень является то, что показатель степени должен быть целочисленным. При дробных величинах степени необходимо воспользоваться(см. выше) стандартными функциями exp и ln:

xa → exp(a*ln(x))

В качестве примера рассмотрим следующее выражение:

Y=axp + bxq + cxl,

где a, b, c – произвольные числа; p,q,l – как целые, так и дробные показатели степени.

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

Program Step; Var

a, b, c, x, y, p, q, l:real; Function St(a, b:real):real; Var

d:real; Begin

If a>0 then d:=exp(b*ln(a))

Else if a<0 then d:=exp(b*ln(abs(a))) Else if b=0 then d:=1

Else d:=0; St:=d;

End; Begin

Writeln( Введите x ); Read(x);

Writeln( Введите a,b,c ); Read(a,b,c);

Writeln( Введите p,q,l ); Read(p,q,l); Y:=a*St(x,p)+b*St(x,q)+c*St(x,l); Write( y= ,y);

End.

Здесь три пары параметров x и p, x и q и x и l – фактические параметры(в арифметическом операторе присваивания, выполняющем вычисление значения y). А параметры a и b в заголовке Function – формальные параметры. Переменная d – локальная, которая потом присваивается имени St подпрограммы – функции.

Сама подпрограмма – функция осуществляет

процедуру возведения в степень:

D=ab.

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

Для этого рассмотрим следующую задачу. Пусть требуется составить программу для вычисления функции:

Y=ax2+bx+c,

где

12

N

 

 

15

a

ti ,

b

ti ,

i 1

 

i

n 1

c ri

i 1

ti и ri – элементы двух массивов.

Для вычисления коэффициентов a, b и c используем подпрограмму – функцию, которая должна обеспечивать вычисление суммы элементов массива при заданных пределах суммирования. Тогда среди формальных параметров необходимо указать: имя массива, нижний предел суммирования, верхний предел суммирования.

В подпрограмме – функции будем вычислять: Тогда программа в целом будет иметь вид:

1

S zi

i 1

Program func; Type

mas=array[1..15] real;

Var

t,z:mas;

n,i:integer;

x,y:real;

Function sum(z:mas;k,l:integer):real; Var

s;real;

i:integer; Begin

s:=0;

for i:=k to l do s:=s+z[i]; sum:=s;

end;

Begin

Writeln( Введите n ); Read(n);

Writeln( Введите x ); Read(x);

Writeln( Введите массив t ); for i:=1 to 15 do Read(t[i]); Write( Введите массив z ); for i:=1 to 12 do Read(x[i]);

y:=sum(t,1,n)*x*x+sum(t,n+1,is)*x+sum(z,1,R); Write( y= ,y);

end.

Источник: https://studfile.net/preview/16565609/