uses crt, graph;
function F(x: real): real;
begin
F := arctan(sqrt(1 - x * x) / x);
end;
const
x1 = -1; { начало и конец графика в реальных значениях }
x2 = 1;
dx = 0.001; { шаг построения графика }
var
e, x, m, a, y: real;
x0, y0, grD, px, py, grM, i, k: integer;
s, s1: string;
begin
grD := detect;
initgraph(grD, grM, '');
x0 := getmaxX div 2; { начало координат по центру }
y0 := getmaxY - 40; { и внизу }
m := (y0 - 40) / pi;
{ масштаб = высота области графика/макс. значение функции }
SetBkColor(7); { цвет фона }
SetColor(1); { цвет линий осей }
line(0, y0, getmaxX, y0); { ось Х }
line(x0, getmaxY, x0, 0); { ось У }
setlinestyle(1, 0, 0); { пунктирная линия }
SetColor(9); { цвет сетки }
for i := 1 to round(pi * m)
do { максимальное количество засечек в одну сторону }
begin
line(10, y0 - round(i * m), 630, y0 - round(i * m));
line(x0 + round(i * m), 0, x0 + round(i * m), getmaxY); { засечки на оси Х }
line(x0 - round(i * m), 0, x0 - round(i * m), getmaxY);
str(i, s);
{ подпись оси У }
outtextXY(x0 - 10, y0 - round(i * m), s); { соответственно засечкам }
{ подпись оси Х }
outtextXY(x0 + round(i * m), y0 + 10, s);
outtextXY(x0 - round(i * m), y0 + 10, '-' + s);
end;
{ центр }
outtextXY(x0 + 5, y0 + 10, '0');
{ подписи концов осей }
outtextXY(getmaxX - 10, y0 - 10, 'X');
outtextXY(x0 + 10, 10, 'Y');
setlinestyle(0, 0, 1);
{ подписи и засечки по оси У-дополнительные }
line(x0 - 3, y0 - round(pi * m / 2), x0 + 3, y0 - round(pi * m / 2));
outtextXY(x0 + 10, y0 - round(pi * m / 2), 'pi/2');
line(x0 - 3, y0 - round(pi * m), x0 + 3, y0 - round(pi * m));
outtextXY(x0 + 10, y0 - round(pi * m), 'pi');
{ график }
x := x1;
while x <= x2 do
begin
px := x0 + round(x * m); { изменение по оси Х }
if x = 0 then
y := pi / 2
else if x < 0 then
y := pi + F(x)
else
y := F(x); { график в реальных координатах }
py := y0 - round(y * m); { в экранных }
putpixel(px, py, 10);
x := x + dx; { наращиваем х }
end;
SetColor(10);
setlinestyle(0, 0, 1);
outtextXY(x0 + 80, 80, 'Grafik functii Y=arccos(x)');
readln
end.