请哪位高手帮忙看看,下面程序有什么问题,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;

解决方案 »

  1.   

    其中computer()函数代码如下,我已经反复检查了好多次,真的没招了。
    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;
      

  2.   

    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;
    在你的代码中先定义了一个AA,位置不 对应该在BEGIN.......END之间
    在程序结束后你GOTO AA  那么你前面的K=1;将会重复执行,K的值又会还原,当GOTO后的K不是GOTO前的K+1了
      

  3.   

    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;
        并没有将k:=1; 包含进去啊