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

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

Форум «Всё о Паскале» _ Задачи _ интеграл...

Автор: -kvaga- 13.12.2007 2:52

В общем нужно программу вычесление интеграла... d(x) на промежутка a и b.


препод на листке объяснил что то..но я мало понял...вот чтов общем он мне написал на листке

Program p;
..............
...............
function int(a,b,eps:real,f:func):real
begin
реализация метода вычисления
интеграла для ф-ии вид которой а
end;

function fi(x:real):real;
begin fi:=x*x;end;
begin
readln(a,b,eps);
writeln(int(a,b,eps,fi);

Sстарое = ((f(a)+f(b))* (b-a))/2
S новое =S1+S2


abs(S ст -S н) < eps все ОК!!!
дальше чет не понял...толи какой то цикл идет ..то ли S новое переходит в S старое...
или ещё что о он написал


в общем помогите разобраться...

Автор: klem4 13.12.2007 2:54

http://forum.pascal.net.ru/index.php?showtopic=4389 ?

Автор: Гость 13.12.2007 2:56

вот код нам давали на лекции..метод средних треугольников..только препод дал программу не работающую..я показал по практике преподавателю(думал доделаем) он сказал что программа очень неграммотна...и вообще зачем нам знать число деления n. и что нужно использовать эпсилан


Код
Program integral;
uses crt;
type func=function(x:real):real;
Var x,S,h:real;
    i:integer;
Function Int(a,b:real;f:func;n:integer):real;
Begin
writeln(' BBeduTe a,b ==>  ');
readln(a,b);
write(' Bbedute 4uclo deleniy otrezka  n');
read(n);
        h:=(b-a)/n;
       S:=0;
    for i:=0 to n-1 do begin
       x:=a+h*0.5;
       S:=S+f(x);
       x:=x+h;
    Int:=h*S;
    end;
    writeln('s=',s);
readln
End,
Begin
Int(a,b;f;n);
End.

Автор: -kvaga- 13.12.2007 21:33

вот нашёл похожее..только сделанно ка кто слишком заумно..возможно ли переделать по проще..чтобы не было никаких модулей

UNIT C_Rect;

INTERFACE

TYPE Func=Function(x:real):real;

FUNCTION Rectangles(a,b:Real; f:Func; n:word):Real;
FUNCTION RectanglesRunge(a,b:Real; f:Func; var n: word;eps:Real):Real;

IMPLEMENTATION

FUNCTION Rectangles(a,b:Real; f:Func; n:word):Real;

VAR
h,f1,sum,x,y:Real;
i:Integer;

BEGIN

h := (b-a) / n;
sum := 0;
x := a;
for i := 1 to n do
begin
y := x;
x := x + h;
f1 := f((x + y)/2);
sum := sum + f1;
end;
Rectangles:= sum*h;
END;

FUNCTION RectanglesRunge(a,b:Real; f:Func; var n: word; eps:Real):Real;

VAR
I1, I2: real;
BEGIN
I1 := Rectangles(a,b,f,n);
n := n+n;
I2 := Rectangles(a,b,f,n);
while abs(I1-I2) > 2*eps do
begin
if n >= 16383 then break;
I1 := I2;
n := n+n;
I2 := Rectangles(a,b,f,n);
end;
RectanglesRunge := I2;
END;

BEGIN
END.