Программа


Program Trapezium;
{ Вычисление интеграла
  методом трапеций
  с заданной точностью }
CONST Eps=1e-7;                  { Точность }
Type Func=function(x:real):real; { Тип функция }
Var Left,Right:real;       { Левая и правая границы интервала интегрирования }
Function F(x:real):real; far;  { Вычисление интегрируемой функции }
  Begin
    F:=sin(x)
  End;
Function Integral(Left,Right:real;Eps:real;F:Func):real;
                         { Функция вычисления интеграла с заданной точностью }
  var PredInt,Int:real;  { Предыдущее и текущее значения интеграла }
      FLeft,FRight:real;
                    { Значение функции на левой и правой границах интервала }
      Break:integer;     { Разбиение }
      Step:real;         { Шаг разбиения }
      dX:real;           { Смещение }
      Sum:real;          { Сумма значений функций }
      i:integer;         { Счетчик }
  Begin
    Break:=1;                         { Оперделение начального разбиения }
    { Вычисление значений функции на концах интервала: }
    FRight:=F(Right);
    FLeft:=F(Left);
    Int:=(FRight+FLeft)/2*(Right-Left); { Предварительное вычисление интеграла }
    Sum:=0;                             { Обнуление суммы }
    repeat  { Цикл набора интегральной суммы до получения заданной точности }
      PredInt:=Int;   { Сохранение предыдущего значения интеграла }
      Step:=(Right-Left)/Break; { Вычисление шага интегрирование }
      dX:=Left+Step/2;          { Определение первого шага интегрирования }
      for i:=0 to Break-1 do Sum:=Sum+F(dX+i*Step); { Набор суммы }
      Break:=Break*2;  { Увеличение разбиения для следующей итерации }
      Int:=(Sum+(FRight+FLeft)/2)*Step/2 { Вычисление значения интеграла }
    until Abs(PredInt-Int)<Eps; { Выход из цикла при достижении заданной точности }
    Integral:=Int   { Определение значения функции }
  End;

BEGIN
  WriteLn; { Пропуск строки }
  { Ввод данных: }
  Write('Введите левую границу интервала интегрирования ');
  ReadLn(Left);
  Write('Введите правую границу интервала интегрирования ');
  ReadLn(Right);

  WriteLn('=',Integral(Left,Right,Eps,F))
                                             { Вычисление и вывод результата }
END.

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