program groffunc;
uses Graph;
var
x1,x2:real; { границы изменения аргумента функции }
y1,y2:real; { границы изменения значения функции }
x:real; { аргумент функции }
y:real; { значение функции в точке x}
dx:real; { приращение аргумента }
l,b:integer; { левый нижний угол области вывода графика }
w,h:integer; { ширина и высота области вывода графика }
mx,my:real; { масштаб по осям X и Y }
x0,y0:integer; { точка - начало координат }
st:string; { изображение числа }
grDriver: Integer;
grMode: Integer;
ErrCode: Integer;
{ Функция, график которой надо построить }
Function f(x:real):real;
begin
f:=2*Sin(x)*exp(x/5);
end;
Function f2(x:real):real;
begin
f2:=Ln(x);
end;
begin
grDriver := VGA;
grMode:=VGAHi;
InitGraph(grDriver, grMode,'d:\tp\bgi');
ErrCode := GraphResult;
if ErrCode <> grOk then Halt(1);
l:=40;
b:=400;
h:=200;
w:=200;
x1:=0;
x2:=25;
dx:=0.01;
{ найдем максимальное и минимальое значения
функции на отрезке [x1,x2] }
y1:=f(x1); { минимум }
y2:=f(x1); { максимум }
x:=x1;
repeat
y:=f(x);
if y<y1 then y1:=y;
if y>y2 then y2:=y;
x:=x+dx;
until (x>=x2);
my:=h/abs(y2-y1);
mx:=w/abs(x2-x1);
{ оси }
x0:=l;
y0:=b-Abs(Round(y1*my));
Line(l,b,l,b-h);
Line(x0,y0,x0+w,y0);
Str(y2:5:1,st);
OutTextXY(l+5,b-h,st);
Str(y1:5:1,st);
OutTextXY(l+5,b,st);
{ построение графика }
x:=x1;
repeat
y:=f(x);
PutPixel(x0+Round(x*mx),y0-Round(y*my),15);
x:=x+dx;
until (x>=x2);
Readln;
CloseGraph;
end.