Помощь - Поиск - Пользователи - Календарь
Полная версия: интеграл...
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
-kvaga-
В общем нужно программу вычесление интеграла... 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 старое...
или ещё что о он написал


в общем помогите разобраться...
Гость
вот код нам давали на лекции..метод средних треугольников..только препод дал программу не работающую..я показал по практике преподавателю(думал доделаем) он сказал что программа очень неграммотна...и вообще зачем нам знать число деления 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-
вот нашёл похожее..только сделанно ка кто слишком заумно..возможно ли переделать по проще..чтобы не было никаких модулей
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.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.