ПОДПРОГРАММА-ФУНКЦИЯ
Цель работы – составление программ с использованием подпрограмм-функций; усвоение принципа локализации.
Постановка задачи: вычислить значение Y, написав для его вычисления удобные функции; необходимые для вычисления значения ввести из текстового файла.
Теоретические сведения
Все, что было сказано в предыдущей работе о подпрограммах- процедурах, верно и для функций, но подпрограммы-функции имеют специфику, позволяющую использовать их особым образом.
Структура описания функции имеет такой вид:
function <имя функции>[(<список формальных параметров>)]:<тип>;
[<раздел описания>]
Begin
<перечисление операторов и программных единиц>
End;
Отличие в описании состоит в том, что в заголовке указывается тип функции, а в блоке реализации обязательно должен присутствовать оператор присваивания:
<имя функции>:= <выражение>;
Типом функции может быть любой скалярный тип Турбо Паскаля (соответственно типом не может быть, например, массив). Тип функции определяет тип результата. После выполнения функции этот результат присваивается имени функции, и вызов функции может находиться в любом выражении, где допустимо использовать значение соответствующего типа. Алгоритм подпрограммы функции в этом месте будет выполнен для соответствующих фактических параметров, и результат подставится в выражение на место имени функции.
|
|
В качестве примера рассмотрим применение подпрограммы-функции к задаче 1 из лабораторной работы № 7.
Program Min3;
{Описание переменных}
Var a,b,c, {исходные данные задачи}
{Описание функции}
Function Min (x,y: real): real; { min – результат функции }
Begin
If x < y then min:= x
else min:= y
End;
Begin
{Ввод исходных данных задачи}
Writeln(‘Введите три числа’);
Readln(a,b,c);
{Вычисление и вывод результата}
Writeln (‘Наименьшее из введенных чисел - ’, min(min(a,b),c);
End.
Как видно из примера, для рассматриваемой задачи использование подпрограммы-функции позволяет наиболее компактно записать алгоритм. Результат сравнения переменных a и b сразу используется как фактический параметр функции при сравнении его с переменной с. Результат второго сравнения сразу выводится на печать.
Пример:
при x = 3.5; z = 10-5; b =4.
Программа расчета:
program lab_8;
var x1, z1, b1: real; {исходные данные}
f: text;
{функция для вычисления степени p положительного числа a }
function pov(a, p:real): real;
begin
pov:=exp(p*ln(a))
end;
{функция для вычисления выражения задачи}
function y(x,z,b:real): real;
var
ch,zn,y:real; {числитель, знаменатель дроби, результат }
begin
ch:=exp(x)+pov(z,6)-4.5E2*sqrt(x); {числитель для Y}
zn:=pov(z,x)+pov(b,3.5); {знаменатель}
y:=ch/zn; {значение Y }
end;
BEGIN
{ввод исходных данных из файла}
Assign(f, ‘inp.txt’);
Reset(f);
|
|
Readln(f,x1,z1,b1);
Close(f);
{вычисление y и вывод результата на экран}
WriteLn(' Arithmetic expression: Y=',y(x1,z1,b1):8:4);
END.
Файл исходных данных Inp.txt:
3.5 1.0e-5 4 |
Результаты расчета:
Arithmetic expression: Y= -6.3184
Варианты заданий взять из лабораторной работы № 2.