uses crt,graph;
const n=30;
function F(x:real):real;
begin
F:=x*x*x+3*x+5;
end;
var xn,xk,x,dx,y,ymn,ymx,mx,my:real;
x1,y1:array[1..n] of real;
m,i,gd,gm,x0,y0:integer;
st:string;
begin
clrscr;
xn:=-2;
xk:=2;
dx:=(xk-xn)/n;
ymn:=F(xn);
ymx:=ymn;
for i:=1 to n do
begin
x:=xn+(i-1)*dx;
y:=F(x);
x1[i]:=x;
y1[i]:=y;
if y<ymn then ymn:=y;
if y>ymx then ymx:=y;
x:=x+dx;
end;
writeln('Znachenia argumenta X:');
for i:=1 to n do
write(x1[i]:0:2,' ');
writeln;
writeln('Znachenia functii Y:');
for i:=1 to n do
write(y1[i]:0:2,' ');
writeln;
writeln('Minimalnoe znachenye functii=',ymn:0:2);
writeln('Maximalnoe znachenye functii=',ymx:0:2);
write('Press Enter...');
readln;
gd:=0;
initgraph(gd,gm,'');
x0:=getmaxX div 2;
y0:=getmaxY div 2;
mx:=(getmaxX-20)/(xk-xn);
if ymx>abs(ymn) then my:=(y0-20)/ymx
else my:=(y0-20)/abs(ymn);
line(0,y0,getmaxX,y0);
outtextXY(10,y0-15,'-2');
outtextXY(getmaxX-10,y0-15,'2');
outtextXY(X0+5,y0-15,'0');
for i:=0 to n do
begin
line(round(i*(getmaxX-10)/n)+10,y0+3,round(i*(getmaxX-10)/n)+10,y0-3);
str(i+1,st);
outtextXY(round(i*(getmaxX-10)/n)+10,y0+10,st);
end;
line(x0,getmaxY-20,x0,20);
outtextXY(x0-15,10,'Y');
line(x0-3,y0-round(ymx*my),x0+3,y0-round(ymx*my));
str(ymx:0:2,st);
outtextXY(x0+5,y0-round(ymx*my),st);
line(x0-3,y0-round(ymn*my),x0+3,y0-round(ymn*my));
str(ymn:0:2,st);
outtextXY(x0+5,y0-round(ymn*my),st);
moveto(10,y0-round(y1[1]*my));
setcolor(10);
circle(10,y0-round(y1[1]*my),2);
for i:=1 to n do
begin
setcolor(12);
lineto(x0+round(x1[i]*mx),y0-round(y1[i]*my));
setcolor(10);
circle(x0+round(x1[i]*mx),y0-round(y1[i]*my),2);
end;
readln
end.