- •Лабораторная работа № 1 Процедурные типы данных
- •Теоретическая часть
- •Процедурные типы
- •Процедурные переменные
- •Параметры процедурного типа
- •Практическая часть
- •Способ Ньютона (метод касательных)
- •Приближенное решение алгебраических и трансцендентных уравнений
- •Cпособ половинного деления
- •Cпособ пропорциональных частей (метод хорд)
- •Способ итераций
- •Приближенное интегрирование функций
- •Формула прямоугольников
- •Формула трапеций
- •Формула Симпсона
- •Задания Написать программу, реализующую итерационные вычислительные процессы, с использованием процедурных типов данных.
Параметры процедурного типа
Процедурные типы допускается использовать в качестве типов формальных параметров процедур и функций. Чтобы использовать процедуры и функции в качестве фактических параметров они должны описываться с директивой far или компилироваться в состоянии с {$F+}. В следующем примере показывается использование параметров процедурного типа для вывода трех таблиц различных арифметических функций:
program Tables;
type
Func = function(X,Y: integer): integer;
function Add(X,Y: integer): integer; far;
begin
Add := X + Y;
end;
function Multiply(X,Y: integer): integer; far;
begin
Multiply := X*Y;
end;
function Funny(X,Y: integer): integer; far;
begin
Funny := (X+Y) * (X-Y);
end;
procedure PrintTable(W,H: integer; Operation: Func);
var
X,Y : integer;
begin
for Y := 1 to H do
begin
for X := 1 to W do Write(Operation(X,Y):5);
Writeln;
end;
Writeln;
end;
begin
PrintTable(10,10,Add);
PrintTable(10,10,Multiply);
PrintTable(10,10,Funny);
end.
При работе программа Table выводит три таблицы. Вторая из них выглядит следующим образом:
1 2 3 4 5 6 7 8 9 10
2 4 6 8 10 12 14 16 18 20
3 6 9 12 15 18 21 24 27 30
4 8 12 16 20 24 28 32 36 40
5 10 15 20 25 30 35 40 45 50
6 12 18 24 30 36 42 48 54 60
7 14 21 28 35 42 49 56 63 70
8 16 24 32 40 48 56 64 72 80
9 18 27 36 45 54 63 72 81 90
10 20 30 40 50 60 70 80 90 100
Параметры процедурного типа особенно полезны в том случае, когда над множеством процедур или функций нужно выполнить какие-то общие действия. В данном случае процедуры PrintTable представляет собой общее действие, выполняемое над функциями Add, Multiply и Funny.
Если процедура или функция должны передаваться в качестве параметра, они должны удовлетворять тем же правилам совместимости типа, что и при присваивании. То есть, такие процедуры или функции должны компилироваться с директивой far, они не могут быть встроенными функциями, не могут быть вложенными и не могут описываться с атрибутами inline или interrupt.
Практическая часть
Процедурные типы рассматриваются для случая, когда процедура или функция должны передаваться в качестве параметра. На практике значительный интерес представляют две задачи:
Приближенное решение алгебраических и трансцендентных уравнений.
Приближенное интегрирование функций.
