uses crt,graph;
const n=15;
var a:array[1..n] of integer;
i,gd,gm,xc,yc,max,min:integer;
mx,my:real;
s:string;
begin
clrscr;
writeln('Vvedite ',n,' celyh chisel:');
for i:=1 to n do
begin
write('a[',i,']=');
readln(a[i]);
end;
gd:=0;
initgraph(gd,gm,'');
min:=a[1];max:=a[1];{найдеи мин и макс для графика}
for i:=1 to n do
begin
if a[i]>max then max:=a[i];
if a[i]<min then min:=a[i];
end;
if min>=0 then{если график выше оси Х}
begin
yc:=getmaxY-40;{положение оси Х}
my:=(yc-40)/max;{масштаб по оси У}
end
else if max<=0 then{если ниже}
begin
yc:=40;
my:=(getmaxY-70)/abs(min);
end
else if max*min<0 then{если и выше и ниже}
begin
yc:=round((getmaxY)*max/(max+abs(min)));
my:=(getmaxY-70)/(max+abs(min));
end;
xc:=30;{положение оси У}
mx:=(getmaxX-60)/n;{масштаб по оси Х}
{оси}
line(xc,yc,getmaxX-20,yc);
outtextXY(getmaxX-20,yc-15,'X');
line(xc,20,xc,getmaxy-20);
outtextXY(xc-10,20,'Y');
{засечки подписи по оси Х}
for i:=1 to n do
begin
line(xc+round((i-1)*mx),yc-2,xc+round((i-1)*mx),yc+2);
str(i,s);
outtextXY(xc+round((i-1)*mx)+3,yc+10,s);
end;
{график}
moveto(xc,yc-round(a[1]*my));
setcolor(10);
for i:=1 to n do
lineto(xc+round((i-1)*mx),yc-round(a[i]*my));
setcolor(12);
for i:=1 to n do
begin
circle(xc+round((i-1)*mx),yc-round(a[i]*my),2);{точки на графике}
str(a[i],s);{преобразуем значения в массиве в строку}
if a[i]>0 then outtextXY(xc+round((i-1)*mx)-5,yc-round(a[i]*my)-15,s){подписи выше оси}
else outtextXY(xc+round((i-1)*mx)-5,yc-round(a[i]*my)+10,s){ниже оси}
end;
readln
end.