После определения процедурного типа появляется возможность описывать переменные и параметры этого типа. Такие переменные называют процедурными переменными.
3. Оформление подпрограмм, передаваемых в качестве параметров. После объявления процедурного типа его можно использовать в описаниях параметров подпрограмм. При этом в программе должны быть запрограммированы и те реальные процедуры и функции, которые будут передаваться как параметры. Их оформление имеет некоторые особенности.
а) Процедуры или функции, которые будут использованы в качестве параметров, должны компилироваться в специальном режиме. Этот режим включается размещением перед текстом подпрограмм директивы компилятора {$F+}, а после текста подпрограмм выключается директивой {$F-}:
{$F+}
Function SE(tt:real):real;
begin
se:=Sin(tt)*Exp(tt);
end;
{. . другие подпрограммы, используемые в качестве параметров}
{$F-}
б) нельзя использовать в качестве параметров встроенные функции. При необходимости использования следует составить свою подпрограмму-функцию, переопределяющую встроенную
Function MySin(x:real):real;
Begin
Mysin:=sin(x);
End;
С учетом сказанного, дополним текст подпрограммы Tabl параметром функционального типа. В тексте программы используем три различные функции и для каждой построим таблицу значений. Конкретная реализация каждой таблицы определяется указанием параметров при вызове подпрограммы Tabl
PROGRAM TablFun3;
{-Вывод на экран таблицы значений функции:
- с помощью подпрограммы с функциональным параметром
- использование подпрограммы для нескольких функций}
Uses Crt;
Type RealFun1= Function(x:real):real;
Var a,b,h :real;
{$F+}
Function Alfa(x:real):real;
begin
Alfa:=sin(2*x+1)*Cos(x/2);
end;
Function NewFun(x:real):real;
begin
NewFun:=Exp(-x)*(x*x*x-3*x*x+5*x-1);
end;
Function Fun1(x:real):real;
begin
Fun1:=sin(2*x)*exp(x);
end;
{$F-}
Procedure Tabl(a,b,h:real; F:RealFun1);
Var N,i:integer; x,y:real;
begin
N:=Round((b-a)/h);
Writeln('Таблица значений функции');
Writeln(' i x y');
Writeln('────────────────────────');
For i:=0 to N do begin
x:=a+i*h; y:=F(x);
Writeln(i:2,' ',x:8:4,' ',y:8:4);
end;
Writeln('────────────────────────');
Readln;
end;
BEGIN
ClrScr;
a:=1; b:=4; h:=0.2;
Tabl(a,b,h,Fun1);
Tabl(a,b,h,Alfa);
Tabl(a,b,h,NewFun);
END.
СОДЕРЖАНИЕ ЗАДАНИЯ
ЗАДАЧА 1. Набрать и выполнить текст программы TablFun1. Убедиться в ее работоспособности.
Выполнить необходимые изменения и дополнения текста программы в соответствии с примером TablFun2. Убедиться в ее работоспособности.
Изменить программу TablFun2 таким образом, чтобы параметры таблицы вводились с клавиатуры с соответствующими пояснениями. Получить на экране таблицу функции для значений a, b, h, выбранных самостоятельно.
ЗАДАЧА 2. Создать новый программный файл, содержащий текст программы TablFun3 (используя предыдущие программы в качестве основы). Убедиться в работоспособности программы.
Включить процедуру Tabl в собственный модуль. Изменить текст программы так, чтобы использовалась процедура Tabl, находящаяся в модуле.
ЗАДАЧА 3. На основе материала предыдущей лабораторной работы составить подпрограмму-процедуру, реализующую автоматический поиск корней нелинейного уравнения, причем параметры a,b,h и имя функции должны быть параметрами процедуры поиска корней. Включить текст процедуры в программу и убедиться в ее работоспособности.
ЗАДАЧА 4. Включить процедуру автоматического поиска корней нелинейного уравнения в собственный модуль. Изменить текст программы так, чтобы использовалась процедура, находящаяся в модуле. Использовать процедуру для поиска корней трех различных нелинейных уравнений (явный вид уравнений получить у преподавателя). Интервалы, содержащие корни, записать в отчет. Учесть, что подпрограммы-функции для всех трех уравнений должны присутствовать в программе. Интервалы, содержащие корни, записать в отчет.
*ЗАДАЧА 5. На основе материала предыдущей лабораторной работы составить подпрограмму-функцию, реализующую вычисление корня нелинейного уравнения с заданной точностью. Границы интервала, содержащего корень, требуемая точность результата и имя функции, определяющей левую часть нелинейного уравнения, являются параметрами функции, вычисляющей корень.
*ЗАДАЧА 6. Включить функцию, реализующую вычисление корня нелинейного уравнения с заданной точностью, в собственный модуль. Изменить текст программы так, чтобы использовалась функция, находящаяся в модуле. Использовать процедуру для вычисления корней трех различных нелинейных уравнений (явный вид уравнений получить у преподавателя). Результаты записать в отчет.
Составил: Дей Е.А. 2004
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.