请哪位高手帮忙看看,下面程序有什么问题,SpeedButton4Click没有反应,不能执行
procedure TForm1.SpeedButton4Click(Sender: TObject);
label AA;
var
i:integer;
begin
d:=strtofloat(edit2.Text);
k:=1;
AA:
computer();
if ((dd[1]<=d) and (dd[2]<=d)) then
if ((dd[3]<=d) and (dd[4]<=d)) then
begin
edit3.Text:=inttostr(k);
for i:=1 to N do
begin
stringgrid1.Cells[i,1]:=floattostr(e[i]);
stringgrid2.Cells[i,1]:=floattostr(f[i]);
end;
end
else
begin
k:=k+1;
goto AA;
end;
end;
procedure TForm1.SpeedButton4Click(Sender: TObject);
label AA;
var
i:integer;
begin
d:=strtofloat(edit2.Text);
k:=1;
AA:
computer();
if ((dd[1]<=d) and (dd[2]<=d)) then
if ((dd[3]<=d) and (dd[4]<=d)) then
begin
edit3.Text:=inttostr(k);
for i:=1 to N do
begin
stringgrid1.Cells[i,1]:=floattostr(e[i]);
stringgrid2.Cells[i,1]:=floattostr(f[i]);
end;
end
else
begin
k:=k+1;
goto AA;
end;
end;
procedure TForm1.computer();
var
i,j:integer;
ee,ff:double;
begin for i:=1 to 4 do
begin
for j:=1 to N do
begin
x1:=x1+(G[i,j]*e[j]-B[i,j]*f[j]);
x2:=x2+(G[i,j]*f[j]+B[i,j]*e[j]);
x3:=x3+(G[4,j]*e[j]-B[4,j]*f[j]);
x4:=x4+(G[4,j]*f[j]+B[4,j]*e[j]);
end;
x1:=x1-(G[i,i]*e[i]-B[i,i]*f[i]);
x2:=x2-(G[i,i]*f[i]+B[i,i]*e[i]);
A1[i]:=x1;
A2[i]:=x2;
ee:=e[i];
ff:=f[i];
Q[4]:=f[4]*x3-e[4]*x4;
e[i]:=(G[i,i]*(P[i]*e[i]+Q[i]*f[i]-(e[i]*e[i]+f[i]*f[i])*A1[i])+B[i][i]*(P[i]*f[i]-Q[i]*e[i]-(e[i]*e[i]+f[i]*f[i])*A2[i]))/((G[i][i]*G[i][i]+B[i][i]*B[i][i])*(e[i]*e[i]+f[i]*f[i]));
f[i]:=(G[i,i]*(P[i]*f[i]-Q[i]*e[i]-(e[i]*e[i]+f[i]*f[i])*A2[i])-B[i][i]*(P[i]*e[i]+Q[i]*f[i]-(e[i]*e[i]+f[i]*f[i])*A1[i]))/((G[i][i]*G[i][i]+B[i][i]*B[i][i])*(e[i]*e[i]+f[i]*f[i]));
dd[i]:=sqrt((e[i]-ee)*(e[i]-ee)+(f[i]-ff)*(f[i]-ff));
x1:=0.0;
x2:=0.0;
end;
end;
label AA;
var
i:integer;
begin
d:=strtofloat(edit2.Text);
k:=1;
AA:
computer();
if ((dd[1] <=d) and (dd[2] <=d)) then
if ((dd[3] <=d) and (dd[4] <=d)) then
begin
edit3.Text:=inttostr(k);
for i:=1 to N do
begin
stringgrid1.Cells[i,1]:=floattostr(e[i]);
stringgrid2.Cells[i,1]:=floattostr(f[i]);
end;
end
else
begin
k:=k+1;
goto AA;
end;
end;
在你的代码中先定义了一个AA,位置不 对应该在BEGIN.......END之间
在程序结束后你GOTO AA 那么你前面的K=1;将会重复执行,K的值又会还原,当GOTO后的K不是GOTO前的K+1了
label AA;
var
i:integer;
begin
d:=strtofloat(edit2.Text);
k:=1;
AA:
//如果条件不满足,从下面开始循环
computer();
if ((dd[1] <=d) and (dd[2] <=d)) then
if ((dd[3] <=d) and (dd[4] <=d)) then
begin
edit3.Text:=inttostr(k);
for i:=1 to N do
begin
stringgrid1.Cells[i,1]:=floattostr(e[i]);
stringgrid2.Cells[i,1]:=floattostr(f[i]);
end;
end
else
begin
k:=k+1;
goto AA;
end;
end;
并没有将k:=1; 包含进去啊