В общем задали нам написать программу на Delphi, реализующую построения 2D графиков.
Суть задания такова:Вывести сетку, вывести график, и по заданному значению Х найти У.
У меня проблема при такой последовательности действий
1.Жму новая сетка.
2.Новый график.
3.Ввожу в 3 EDIT число и нажимаю "Апроксимировать" выдает аткую вот ошибку(я так понимаю, что даже не считывает число). Потому что выбивает именно в том месте (1 строка процедуры Button1.click).
Если же запустить программу, и сначала ввести в область 3 edit число,то программа его спокойно прочитает.
Скрины приложены.
Код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Image1: TImage;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Edit4: TEdit;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Button2: TButton;
Button3: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
XX:array [1..500] of real;
YY:array [1..500] of real;
MinY,MaxY:real;
MinX,MaxX:real;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
y,x:real;
fminX,fmaxX,fminY,fmaxY:real;
kx,ky,bx,by,ix,iy:real; h:real;
i:byte;
begin
//Image1.Canvas.Rectangle(0,0,Image1.Width,image1.Height);
//form1.Image1.Canvas.MoveTo(trunc(image1.Width/2),0);
//form1.Image1.Canvas.LineTo(trunc(image1.width/2),0);
//image1.Canvas.Rectangle(trunc(image1.Width/2),0,trunc(image1.Width/2)+2,image1.Height);
//image1.Canvas.Rectangle(0,trunc(image1.height/2),image1.Width,trunc(image1.Height/2)+2);
fminX:=0; fmaxX:=image1.Width;fminY:=Image1.Height;fmaxY:=0;
minY:=minX;
maxY:=maxX;
kx:= (fmaxX-fminX)/(maxX-MinY); bx:=fmaxX-kx*MaxX;
ky:= (fmaxY-fminY)/(maxY-minY); by:=fMaxY-ky*MaxY;
h:=(MaxX-minX)/400;
x:=MinX;
y:=x*x;
XX[1]:=x;
YY[1]:=y;
i:=1;
ix:=trunc(kx*x+bx); iy:=trunc(ky*y+by); image1.Canvas.MoveTo(trunc(ix),trunc(iy));
repeat
inc(i) ;
x:=x+h; y:=x*x;
XX[i]:=x; YY[i]:=y;
ix:=trunc(kx*x+bx); iy:=trunc(ky*y+by);
image1.Canvas.lineto(trunc(ix),trunc(iy));
until x>MaxX;
end;
procedure TForm1.Button2Click(Sender: TObject);
var
hX,hY:real;
i:byte;
begin
Image1.Canvas.Rectangle(0,0,Image1.Width,image1.Height);
image1.Canvas.Rectangle(trunc(image1.Width/2),0,trunc(image1.Width/2)+2,image1.Height);
image1.Canvas.Rectangle(0,trunc(image1.height/2),image1.Width,trunc(image1.Height/2)+2);
MinX:=StrtoInt(Form1.Edit1.Text);
MaxX:=StrtoInt(Form1.Edit2.Text);
hX:=trunc(Image1.Width/(maxX-minX)) ;
hY:=trunc(Image1.Height/(maxX-MinX));
for i:=0 to trunc(maxX-minX) do
begin
image1.Canvas.MoveTo(trunc(hX*i),0);
image1.Canvas.LineTo(trunc(hX*i),Image1.Height);
image1.Canvas.MoveTo(0,trunc(hY*i));
image1.Canvas.LineTo(Image1.Width,trunc(hY*i));
end;
end;
procedure TForm1.Button3Click(Sender: TObject);
var
a:integer;
begin
a:=StrtoInt(Form1.Edit3.Text);
form1.Edit4.Text:=inttostr(a);
//x:=Strtoint(form1.Edit3.text);
//for i:=1 to 399 do
//if (X>XX[i])and(X<XX[i+1]) then edit1.Text:=FloattoStr(YY[i]);
end;
end.