uses graph;
{ Функция, график которой будем рисовать }
function F(x: real):real;
begin
F := ((x + 2)*x + 1)*x;
end;
var
x, y, x0, y0, x1, y1, x2, y2, i, j: integer;
fx1, fy1, fx2, fy2: real;
W, H: integer;
M: real;
gdriver, gmode, errorcode: integer;
begin
{ Автоопределение графического драйвера }
gdriver := DETECT;
{ Инициализация графического режима }
initgraph(gdriver, gmode, '');
{ Результат инициализации }
errorcode := graphresult;
if (errorcode <> grOk) then { Проверка ошибки при инициализации }
{ Вывод кода ошибки }
begin
writeln('Graphics error: ' + grapherrormsg(errorcode));
writeln('Press any key to halt:');
readln;
exit;
end;
{ установка цвета фона рисунка }
setbkcolor(LIGHTGRAY);
cleardevice;
{ размеры графика }
W := getmaxx;
H := getmaxy;
{ масштаб графика }
M := 40;
{ положение координатных осей (посередине графика) }
X0 := W div 2;
Y0 := H div 2;
{ установка цвета координатных осей }
setcolor(RED);
{ рисуем координатные оси }
line(X0, 0, X0, H);
line(0, Y0, W, Y0);
{ рисуем засечки на координатной оси Y}
x := 1;
repeat
x1 := X0 + (x * Round(M));
x2 := X0 - (x * Round(M));
line(x1, Y0-3, x1, Y0+3);
line(x2, Y0-3, x2, Y0+3);
inc(x);
until (x1 > W) or (x2 < 0);
{ рисуем засечки на координатной оси X}
y := 1;
repeat
y1 := y0 + (y * Round(M));
y2 := y0 - (y * Round(M));
line(x0-3, Y1, x0+3, Y1);
line(x0-3, Y2, x0+3, Y2);
inc(y);
until (y1 > H) or (y2 < 0);
{ установка цвета графика }
setcolor(BLUE);
{ собственно рисование в цикле по возможным графическим х }
for x := 1 to W do
begin
fx1 := (x-1-X0) / M; { пересчет графического x в математическое fx }
fy1 := F(fx1); { вычисление fy как функции от fx }
fx2 := (x-X0) / M; { то же для следующей точки }
fy2 := F(fx2);
y1 := Y0 - Round(fy1*M); { обратный пересчет математических координат fy }
y2 := Y0 - Round(fy2*M); { в графические координаты y }
line(x-1, y1, x, y2); { рисование }
end;
readln;
closegraph;
end.