Программа


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.

Бесплатные примеры программ
Примеры написанных программ
Помощь студентам по программированию