Программа
TYPE Func=function(x:real):real; { Тип функция }
FUNCTION Pow3(X:real):real; { Вычисление третьей степени }
Begin
Pow3:=X*X*X;
End;
FUNCTION F1(X:real):real;far; { Вычисление первой интегрируемой функции }
Begin
F1:=Pow3(X)*Exp(2*X);
End;
FUNCTION F2(X:real):real;far; { Вычисление второй интегрируемой функции }
Begin
X:=X/2+Pi/4; { Пересчет аргумента для сокращения вычислений }
F2:=Pow3(Sin(X)/Cos(X));
End;
FUNCTION Integral(Left,Right:real;Break:integer;F:Func):real;
{ Функция вычисления интеграла }
Var Sum, { Промежуточная сумма }
LengthStep, { Длина шага разбиения }
LeftY,RightX, { Левая и правая границы шага интегрирования }
PointX, { Абсцисса средины левого промежутка }
RightY:real; { Значение интегрируемой функции
на правой границе шага интегрирования }
i:integer; { Счетчик }
Begin
Sum:=0; { Обнуление промежуточной суммы }
LengthStep:=(Right-Left)/Break; { Вычисление длины шага интегрирования }
PointX:=Left+0.5*LengthStep;
{ Вычисление абсциссы средины левого промежутка }
for i:=1 to Break do { Цикл набора промежуточной суммы }
begin
Sum:=Sum+F(PointX); { Набор промежуточной суммы }
PointX:=PointX+LengthStep
{ Пересчет абсциссы средины следующего промежутка }
end;
Integral:=Sum*LengthStep { Определение интегральной суммы }
End;
Function ExactIntegral(Left,Right:real;Eps:real;F:Func):real;
{ Функция вычисления интеграла с заданной точностью }
var PredInt,Int:real; { Предыдущее и текущее значения интеграла }
Break:integer; { Разбиение }
Begin
Break:=1; { Оперделение начального разбиения }
Int:=Integral(Left,Right,Break,F);{ Предварительное вычисление интеграла }
repeat
PredInt:=Int; { Сохранение предыдущего значения интеграла }
Break:=Break*2; { Увеличение разбиения }
Int:=Integral(Left,Right,Break,F)
{ Вычисление нового значения интеграла }
until abs(Int-PredInt)<=Eps;
{ Выход из цикла при достижении заданной точности }
ExactIntegral:=Int { Определение значения функции }
End;
PROCEDURE Master(Head:string; F:Func); { Процедура выдачи запроса и вычисления интеграла }
Var Left,Right:real; { Левая и правая границы интервала интегрирования }
Eps:real; { Точность }
Begin
WriteLn; { Пропуск строки }
WriteLn(Head); { Вывод поясняющего заголовка }
{ Ввод данных: }
Write('Введите левую границу интервала интегрирования ');
ReadLn(Left);
Write('Введите правую границу интервала интегрирования ');
ReadLn(Right);
Write('Введите точность вычисления ');
ReadLn(Eps);
WriteLn('=',ExactIntegral(Left,Right,Eps,F)) { Вычисление и вывод результата }
End;
BEGIN
WriteLn; { Пропуск строки }
Master('ВЫЧИСЛЕНИЕ ИНТЕГРАЛА ПЕРВОЙ ФУНКЦИИ',F1);
Master('ВЫЧИСЛЕНИЕ ИНТЕГРАЛА ВТОРОЙ ФУНКЦИИ',F2);
END.
Бесплатные примеры программ
Примеры написанных программ
Помощь студентам по программированию