переделай чуть чуть, она больше делает чем надо=)
Код
program task3(input,output);
var x,xn,xk,dx,h,hv:real;
k:integer;
function f(x:real):real;
begin f:=x*x*x-3*x;end;
function fpr1(x:real):real;
begin fpr1:=3*x*x-3;end;
function fpr2(x:real):real;
begin fpr2:=3*x*x-3; end;
function fprL(x,h:real):real;
begin fprL:=(f(x+h)-f(x))/h; end;
function fprR(x,h:real):real;
begin fprR:=(f(x)-f(x-h)); end;
function y4(x:real):real;
begin y4:=(fprL(x,h)+fprR(x,h))/2; end;
function fpr(x:real):real;
begin if x>=0 then fpr:=fpr1(x) else fpr:=fpr2(x); end;
procedure prmax(y6,y7,x:real;var max,xmax,ymax:real);
begin
if max<=y6 then begin max:=y6; xmax:=x; ymax:=f(x);end;
if max<=y7 then begin max:=y7; xmax:=x; ymax:=f(x);end;
end;
procedure main(xn,xk,dx,h:real);
var
i:integer;
y,max,xmax,ymax,y5,y6,y7:real;
begin
writeln('pri h= ',h:5:5);
i:=0;x:=xn;
max:=abs(fprL(xn,h)-fpr(xn));
xmax:=xn; ymax:=f(x);
writeln(' x y y1=f`L y2=f`R y3=f` y4=(f`L+f`R)/2 |y4-y3| |y1-y3| |y2-y3|');
while(i<100) and (x<=xk+dx/2) do
begin
y5:=abs(y4(x)-fpr(x));
y6:=abs(fprL(x,h)-fpr(x));
y7:=abs(fprR(x,h)-fpr(x));
writeln(' ',x:2:1,' ',f(x):1:2,' ',fprL(x,h):1:2,' ',fprR(x,h):1:2,' ',fpr(x):1:2,y4(x):1:2,y5:1:2,y6:1:2,y7:1:2);
prmax(y6,y7,x,max,xmax,ymax);
x:=x+dx;
i:=i+1;
end;
writeln('maksimalnoe otklonenie=',max:5:2,'pri x=',xmax:5:2,'y=',
ymax:5:2);
end;
begin
write('Vvedite xn,xk,dx,h');
readln(xn,xk,dx,hv);
k:=1;
repeat
case k of
1:begin h:=dx/10; k:=k+1; main(xn,xk,dx,h) end;
2:begin h:=dx/100; k:=k+1; main(xn,xk,dx,h); end;
3:begin h:=hv; k:=k+1; main(xn,xk,dx,h); end;
end;
until k>3;
readln;
end.