unit postgr; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, XPMan; type fun=function(x:real):real; TForm1 = class(TForm) Button1: TButton; Edit1: TEdit; Edit2: TEdit; Label1: TLabel; Label2: TLabel; Label3: TLabel; Button2: TButton; ComboBox1: TComboBox; XPManifest1: TXPManifest; procedure Button1Click (Sender: TObject); procedure gr(f:fun); procedure RedrawForm1; procedure ComboBox1Change (Sender: TObject); procedure FormCreate(Sender: TObject); procedure Button2Click (Sender: TObject); procedure FormResize(Sender: TObject); end; var Form1: TForm1; function f1(x:real):real; function f2(x:real):real; function f3(x:real):real; function f4(x:real):real; function f5(x:real):real; var ff:array[0..4] of fun=(f1,f2,f3,f4,f5); implementation {$R *.dfm} const Lx=80;//отступ от края канвы по оси Х Ly=60;//отступ от края канвы сверху и 2*Ly - снизу n=100;//число подынтервалов вычисления функции ndx=n div 10;//число подын-тервалов сетки по X ndy=n div 15;//число подын-тервалов сетки по Y nc=7;mc=2;//:nc:mc - формат вывода оцифровки осей var d:byte;//номер 0..4 в ComboBox1 выбранной функции ss:shortstring;//строка для выражения выбранной функции StartColor:TColor=clBtnFace;//стартовый цвет формы StartBrushStyle:TBrushStyle=bsSolid;//стартовый стиль формы function f1(x:real):real; begin f1:=2*sin(x)*cos(2*x); end; function f2(x:real):real; begin f2:=exp(sin(x)+cos(x)); end; function f3(x:real):real; begin f3:=x*sqrt(abs(x)); end; function f4(x:real):real; begin f4:=x; end; function f5(x:real):real; begin f5:=ln(abs(x)); end; procedure TForm1.gr(f:fun); //ПРОЦЕДУРА РИСОВАНИЯ ГРАФИКА var i:integer; xmin,xmax,ymin,ymax,dx,mx,my,nx,ny:real; x,y:array of real; kx,ky:array of integer; s:shortstring; //размеры области рисования графика функции ymine,xmine,xmaxe,ymaxe:integer; begin //1) xmin:=strtoint(edit1.Text); xmax:=strtoint(edit2.Text); dx:=(xmax-xmin)/n; setlength(x,n); setlength(y,n); ymin:=ff[d](xmin); ymax:=ff[d](xmin); for i:=0 to n-1 do begin x[i]:=xmin+dx*i; y[i]:=ff[d](x[i]); if y[i]>ymax then ymax:=y[i] else if y[i]