Помощь - Поиск - Пользователи - Календарь
Полная версия: Вычисление интеграла с заданной точностью
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
deymon81
Составить программу вычисления интеграла S=/f(x)dx на интервале [0.4..1.2] с точностью Е=0.001 методом трапеций


f(x)=cos (x*x)/(x+1)

Вот программа.......

Код
var
    i ,n  :   word;
    h   :   Real;
    s1  :   Real;
    s2  :   Real;
function F (x:Real):Real;
begin
F (x):=  (cos (x*x))/(x+1);
end;
    
function MTrap(a   :   Real; b   :   Real;  E:Real):Real;

begin
writeln ('Введите левую границу интервала а:');Read (a);
writeln ('Введите правую границу интервала b:');Readln (b);
writeln ('Введите точность Е:');Readln (Е);
    n:=1;
    h:=b-a;
    s2:=h*(F(a)+F(b))/2;
    repeat
        s1:=s2;
        s2:=0;
        i:=1;
        repeat
            s2:=s2+F(a-h/2+h*i);
            i:=i+1;
        until not(i<=n);
        s2:=s1/2+s2*h/2;
        n:=2*n;
        h:=h/2;
    until not(Abs(s2-s1)>3*E);
    MTrap:=s2;
WriteLn('Интеграл решенный методом Трапеции равен ' ,MTrap:4:3);
end;

end.


c END- ами ошибка?.......или я что-то не то делаю? Помогите
klem4
Исправил синтаксические ошибки

var
i ,n : word;
h : Real;
s1 : Real;
s2 : Real;

function F (x:Real):Real;
begin
F := (cos (x*x))/(x+1);
end;

function MTrap(a : Real; b : Real; E:Real):Real;

begin
writeln ('??????? ????? ??????? ????????? ?:');Read (a);
writeln ('??????? ?????? ??????? ????????? b:');Readln (b);
writeln ('??????? ???????? ?:');Readln (E);
n:=1;
h:=b-a;
s2:=h*(F(a)+F(b))/2;
repeat
s1:=s2;
s2:=0;
i:=1;
repeat
s2:=s2+F(a-h/2+h*i);
i:=i+1;
until not(i<=n);
s2:=s1/2+s2*h/2;
n:=2*n;
h:=h/2;
until not(Abs(s2-s1)>3*E);
MTrap:=s2;
WriteLn('???????? ???????? ??????? ???????? ????? ' ,MTrap:4:3);
end;
begin
end.
deymon81
Цитата(klem4 @ 25.03.2006 14:19) *

Исправил синтаксические ошибки


Что-то не пашет......вообще не загружается программа
Сделана по аналогии....

Код
unit IntegralTrapUnit;

declaration
(*
интегрируемая функция
*)
function F(X:Real):Real;

interface
    IntegralTrap;
implementation

{$DOC+}
(*********************************************************
$RU
Интегрирование методом трапеций с оценкой точности.

Считается интеграл функции F на отрезке [a,b] с погрешностью
порядка Epsilon.

function IntegralTrap(a:Real;b:Real;Epsilon:real):real;
*********************************************************)
function IntegralTrap(
    const   a   :   Real;
    const   b   :   Real;
    const   Epsilon:Real):Real;
var
    i   :   Integer;
    n   :   Integer;
    h   :   Real;
    s1  :   Real;
    s2  :   Real;
begin
    n:=1;
    h:=b-a;
    s2:=h*(F(a)+F(b))/2;
    repeat
        s1:=s2;
        s2:=0;
        i:=1;
        repeat
            s2:=s2+F(a-h/2+h*i);
            i:=i+1;
        until not(i<=n);
        s2:=s1/2+s2*h/2;
        n:=2*n;
        h:=h/2;
    until not(AbsReal(s2-s1)>3*Epsilon);
    Result:=s2;
end;

end.
klem4
Цитата
Что-то не пашет......вообще не загружается программа


И что это значит ? Та программа, которую выложил я (исправленная твоя) компилируется без единой ошибки.
Altair
Цитата
Исправил синтаксические ошибки

Цитата
writeln ('??????? ????? ??????? ????????? ?:')

lol.gif good.gif
Цитата
Что-то не пашет......вообще не загружается программа

ну так программы то и нет... есть только процедуры, а текст главной программы:
Цитата
begin
end.
deymon81
Цитата(Altair @ 25.03.2006 19:02) *

lol.gif good.gif

ну так программы то и нет... есть только процедуры, а текст главной программы:


А если я убираю begin он просит End;End.
непонятно
Altair
Открой любой учебник по языку Паскаль, и прочти одну из первых глав - "структура программы на паскале".
Тогда придешь.
MaxiMum
Цитата(deymon81 @ 25.03.2006 13:19) *

Составить программу вычисления интеграла S=/f(x)dx на интервале [0.4..1.2] с точностью Е=0.001 методом трапеций
f(x)=cos (x*x)/(x+1)

Ребята, помогите пожалуйста!!!
Как будет выглядеть вышеуказанная программа, если ещё и даётся доп. условие, что число отрезков N=60 ?
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.