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]); dx:=dx+dx; end; //2) //очистка области вывода гра-фика Canvas.Brush.Color:=clwhite; Canvas.Brush.Style:=bsSolid; xmine:=Lx; xmaxe:=ClientWidth-Lx; ymine:=Ly; ymaxe:=ClientHeight-2*Ly; Canvas.Rectangle (0,0, ClientWidth,ClientHeight-Ly); //3) mx:=(XmaxE-XminE)/(Xmax-Xmin); my:=(YmaxE-YminE)/(Ymax-Ymin); setlength(kx,n); setlength(ky,n); for i:=0 to n-1 do begin KX[I]:=ROUND(XminE+(X[I]-Xmin)*mx); KY[I]:=ROUND(YminE-(Ymax-Y[I])*my); end; //4) Nx:=(XmaxE-XminE)/NdX ; for i:=0 to ndx do begin Form1.Canvas.MoveTo(xmine{+round(nx)*i},ymine); Form1.Canvas.LineTo(xmine{+round(nx)*i},ymaxe); end; //5) //6) //7) end;//procedure TForm1.gr; procedure TForm1.Button1Click( Sender: TObject); begin gr(ff[d]) end; procedure TForm1.ComboBox1Change(Sender: TObject); begin //d:=номер выбранной функции d:=ComboBox1.ItemIndex; //ss:=текст выражения выбранной функции ss:=ComboBox1.items[ ComboBox1.ItemIndex]; end; procedure TForm1.FormCreate( Sender: TObject); begin Edit1.Text:='1'; Edit2.Text:='12'; d:=0;//начальный номер выбран-ной функции ss:=ComboBox1.items[d];//текст её выражения //придание форме начальных раз-меров Form1.Height:=400; Form1.Width:=600; //перерисовка формы и графика RedrawForm1; end; procedure TForm1.Button2Click(Sender: TObject); begin close; end; procedure TForm1.FormResize( Sender: TObject); begin RedrawForm1 end; procedure TForm1.RedrawForm1; //ПЕРЕРИСОВКА ФОРМЫ И ГРАФИКА ПРИ ИЗМЕНЕНИИ //ВЕРТИКАЛЬНОГО И ГОРИЗОНТЛЬНОГО РАЗМЕРОВ ФОРМЫ var dh,dl,dt:integer; begin Canvas.Brush.Color:= StartColor; Canvas.Brush.Style:= StartBrushStyle; Canvas.Rectangle(0,0, ClientWidth,ClientHeight+LY); Form1.Refresh;gr(ff[d]); dh:=Ly div 2; dt:=Form1.ClientHeight - Ly div 4 * 3+10; dl:=Form1.ClientWidth div 16; Form1.Button1.Top:=dt; Form1.Button1.Left:=dl*10; Form1.Button1.Width:=dl*2; Form1.Button2.Top:=dt; Form1.Button2.Left:=dl*13; Form1.Button2.Width:=dl*2; Form1.Edit1.Top:=dt; Form1.Edit1.Left:=dl; Form1.Edit1.Width:=dl*2; Form1.Edit2.Top:=dt; Form1.Edit2.Left:=dl*4; Form1.Edit2.Width:=dl*2; Form1.ComboBox1.Top:=dt; Form1.ComboBox1.Left:=dl*7; Form1.ComboBox1.Width:=dl*2; Form1.Label1.Top:=dt-dh div 2; Form1.Label1.Left:=dl*1; Form1.Label1.Width:=dl*2; Form1.Label2.Top:=dt-dh div 2; Form1.Label2.Left:=dl*4; Form1.Label2.Width:=dl*2; Form1.Label3.Top:=dt-dh div 2; Form1.Label3.Left:=dl*7; Form1.Label3.Width:=dl*2; end; end.