Тема. Создание модулей. Процедурный тип. Нетипизированные параметры.
Составить подпрограмму-функцию INTPRG вычисления определенного интеграла по формуле прямоугольников:
, где n – количество отрезков разбиения.
В основной программе использовать процедуру INTPRG для вычисления интегралов:
Напишем модуль. Объявим процедурный тип:
Type
f1 = function(X:real):real; //процедурный тип
Код функции расчета интеграла по методу прямоугольников:
Function INTPRG(x,b, h:real;f:f1):real; //функция расчета по методу прямоугольников
var s,k,y:real;
i:integer;
begin
s:=0; // присваиваем площади значение 0, чтобы впоследствии, шаг за шагом, наращивать его.
while(x<=b) do // собственно, начинаем этот цикл.
begin
y:=f(x); // по мере нарастания х, вычисляем значения у в них.
s:=s+y*h; // с каждым шагом наращивем площадь.
x:=x+h; // наращиваем х(движемся далее по циклу).
end; // конец цикла.
result:=s;
end;
В основной программы опишем две функции:
function f(x:real):real;
begin
f:=x*(x-1);
end;
function f2(x:real):real;
begin
f2:=exp(x)/(x+1);
end;
Вывод результата расчета на экран:
s:=INTPRG(0,2,0.001,f);
writeln(s:2:4);
s:=INTPRG(0,1,0.01,f2);
writeln(s:2:4);
Исходный код модуля для Delphi 7:
unit Integral;
interface
Type
f1 = function(X:real):real; //процедурный тип
Function INTPRG(x,b, h:real;f:f1):real;
implementation
Function INTPRG(x,b, h:real;f:f1):real; //функция расчета по методу прямоугольников
var s,k,y:real;
i:integer;
begin
s:=0; // присваиваем площади значение 0, чтобы впоследствии, шаг за шагом, наращивать его.
while(x<=b) do // собственно, начинаем этот цикл.
begin
y:=f(x); // по мере нарастания х, вычисляем значения у в них.
s:=s+y*h; // с каждым шагом наращивем площадь.
x:=x+h; // наращиваем х(движемся далее по циклу).
end; // конец цикла.
result:=s;
{s:=(F(a)+F(b))/2;
i:=1;
k:=a-e;
while k<=b+e do
begin
k:=k+e;
s:=s+F(k);
i:=i+1;
end;
result:=s*e;}
end;
end.
Исходный код программы для Delphi 7:
program Project2;
{$APPTYPE CONSOLE}
uses
SysUtils,
Windows,
Integral in 'Integral.pas';
//Type f1 = function(X:real):real;
var
i,n:integer;
s:real;
function f(x:real):real;
begin
f:=x*(x-1);
end;
function f2(x:real):real;
begin
f2:=exp(x)/(x+1);
end;
begin
writeln('Metod primougolnikov:');
s:=INTPRG(0,2,0.001,f);
writeln(s:2:4);
s:=INTPRG(0,1,0.01,f2);
writeln(s:2:4);
readln;
end.
Блок схемы:
Функция расчета интеграла по формуле прямоугольников:
Блок схема основной программы:
|