Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Метод Трапеции и Симпсона

Автор: Selena 6.12.2005 10:30

Помогите пожалуйста дописать программу.
Задача в приложенном документе.

Я не могу сообразить как мне сделать это:"Вычислить разность в количестве итераций"

Вот что у меня получилось:

Program Lab4_2;
Uses Wincrt;
Type
func=Function(xa:Real):Real;
Var
x1,x2,T1,S1,R1,R ,T2,S2, x:Real;
A,B,Exp,Eps:Real;
n1,n2,n:Word;
w:text;

Function Int(xa:Real):Real;Far;
Begin
Int:=((sin(xa*xa+0.5))/((cos(xa*xa+0.5))))/(1+2*xa*xa);
End;

Function MTrap(Aa,Ba:Real;na:Word;Int:func):Real;
Var i:Word; S,x,h:Real;
Begin
h:=(Ba-Aa)/na;
S:=(Int(Aa)+Int(Ba))*0.5;
x:=Aa+h;
For i:=1 to na-1 do
Begin S:=S+Int(x);x:=x+h;End;
MTrap:=S*h;
End;


Function MSims(Aa,Ba:Real;na:Word;Int:Func):Real;
Var i:Word;s,x,h:Real;c:shortint;
Begin
h:=(Ba-Aa)/na;
S:=Int(Aa)+Int(Ba);
c:=1; x:=Aa+h;
For i:=1 to na-1 do
Begin
S:=S+Int(x)*(c+3);
c:=-c;
x:=x+h;
End;
MSims:=S*h/3;
End;


Begin
WriteLn('1. Вычисление значений определенного интеграла');WriteLn;
WriteLn('Введите левую границу интервала');Read(A);
WriteLn('Введите правую границу интервала’);Read(B);
WriteLn('Введите число разбиений n');Read(n);
WriteLn('Введите точность Exp'); Read(Exp);
T1:=MTrap(A,B,n, Int);
repeat
n1:=2*n;
T2:=MTrap(A,B,n1,Int);
R:=Abs(T2-T1);
T1:=T2;
until R<Exp;
WriteLn('Интеграл решенный методом Трапеции равен ',T2:9:7);
WriteLn('Необходимое число интервалов разбиения: ',n1:6);
Writeln;
S1:=MSims(A,B,n, Int);
repeat
n2:=2*n;
S2:=MSims(A,B,n2,Int);
R:=Abs(S2-S1);
S1:=S2;
until R<Exp ;
WriteLn( 'Интеграл решенный методом Симпсона равен ',S2:9:7);
WriteLn('Необходимое число интервалов разбиения: ',n2:6);
End.



Эскизы прикрепленных изображений
Прикрепленное изображение

Автор: Гость 3.06.2008 15:22

правилно