Здравствуйте!
Нужно построить график некоторой функции, координаты точек графика нужно вывести в StringGrid... я вывожу координаты обычной параболы х*х. По идее первой координатой, выводимой первой строкой в StringGrid, должна быть точка (0,0), а у меня (1,1)...
подскажите, пожалуйста, как нужно сделать чтобы первой первой строкой выводились первые координаты.Вот код программы
Код:
unit Unit1;
type
Tchgraf=record
arg:real;
func:real;
end;
Ms=Array[1..50] of Tchgraf;
TForm1 = class(TForm)
...........................
private
{ Private declarations }
public
{ Public declarations }
end;
var
k:Tchgraf;
a:Ms;
f:file of Tchgraf;
kod,n,i:integer;
Form1: TForm1;
implementation
uses Unit3, Unit2, Unit4;
{$R *.dfm}
procedure sort(n:integer;var a:Ms); {процедура сортировки прямого включения}
var i,j:integer;
x:Tchgraf;
begin
for i:=2 to n do
begin
x:=a[i];
for j:=i downto 2 do
if a[j-1].arg>x.arg then
begin
a[j]:=a[j-1];
a[j-1]:=x;
end;
end;
end;
procedure grafik(a:Ms; n:integer); { процедура построения графика}
var i:integer;
begin
form3.Series1.Clear;
for i:=1 to n do
Form3.Series1.AddXY(a[i].arg,a[i].func,'',clblue);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
i:=1;
assignfile(f,'rasschet.txt');
StringGrid1.Cells[0,0]:='';
StringGrid1.Cells[1,0]:='X';
StringGrid1.Cells[2,0]:='Y';
end;
function yrav(x:real):real; {данная функция}
begin
result:=x*x;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
reset(f);
i:=1;
while not(eof(f)) do
begin
read(f,a[i]);
StringGrid1.Cells[0,i]:=inttostr(i);
StringGrid1.Cells[1,i]:=floattostr(a[i].arg);
StringGrid1.Cells[2,i]:=floattostr(a[i].func);
i:=i+1;
StringGrid1.RowCount:=i+1;
end;
closefile(f);
grafik(a,i-1);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
rewrite(f);
for i:=1 to stringgrid1.RowCount-2 do
begin
a[i].arg:=strtofloat(StringGrid1.Cells[1,i]);
a[i].func:=strtofloat(StringGrid1.Cells[2,i]);
write(f,a[i]);
end;
closefile(f);
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
Form3.Series1.Clear;
StringGrid1.RowCount:=2;
for i:=1 to 50 do
begin
a[i].arg:=i;
a[i].func:=yrav(i);
StringGrid1.Cells[0,i]:=inttostr(i);
StringGrid1.Cells[1,i]:=floattostr(a[i].arg);
StringGrid1.Cells[2,i]:=floattostr(a[i].func);
StringGrid1.RowCount:=StringGrid1.RowCount+1;
end;
grafik(a,50);
end;
procedure TForm1.Button4Click(Sender: TObject);
var s:string;
begin
i:=i+1;
if i>50 then
begin
ShowMessage('Больше не надо!!!');
exit;
end;
n:=i-1;
s:=Edit1.Text;
val(s,k.arg,kod);
if kod<>0 then
begin
showmessage('Ошибка-x');
exit;
end;
s:=Edit2.Text;
val(s,k.func,kod);
if kod<>0 then
begin
showmessage('Ошибка-y');
exit;
end;
a[n]:=k;
sort(n,a);
StringGrid1.RowCount:=2;
for i:=1 to n do
begin
StringGrid1.Cells[0,i]:=inttostr(i);
StringGrid1.Cells[1,i]:=floattostr(a[i].arg);
StringGrid1.Cells[2,i]:=Floattostr(a[i].func);
StringGrid1.RowCount:=StringGrid1.RowCount+1;
end;
grafik(a,n);
Edit1.Text:='';
Edit2.Text:='';
end;
procedure TForm1.Button5Click(Sender: TObject);
var j:integer;
begin
val(edit3.text,n,kod);
if kod<>0 then
begin
showmessage('Ошибка-#');
exit;
end;
for i:=n to StringGrid1.RowCount-1 do
begin
for j:=1 to 2 do
begin
StringGrid1.Cells[j,i]:=StringGrid1.Cells[j,i+1];
end;
if i<StringGrid1.RowCount-1 then a[i]:=a[i+1]
else
a[i]:=a[i];
end;
grafik(a,stringgrid1.RowCount-2);
StringGrid1.RowCount:=StringGrid1.RowCount-1;
StringGrid1.Cells[0,StringGrid1.RowCount-1]:='';
end;
procedure TForm1.Button6Click(Sender: TObject);
begin
Form3.Show;
end;
end.