出问题的地方在最下面(上面是画椭圆的算法)
procedure TForm2.Button1Click(Sender: TObject);
var
  a,b,x,y:integer;
  d1,d2:real;
begin
  form1.Image1.Picture.Bitmap:=Tbitmap.Create;
  form1.Image1.Picture.Bitmap.Width:=form1.Image1.Width;
  form1.Image1.Picture.Bitmap.Height:=form1.Image1.Height;
  a:=strtoint(edit1.Text);
  b:=strtoint(edit2.Text);
  x:=strtoint(edit3.Text);
  y:=strtoint(edit4.Text);
  x:=0;
  y:=b;
  d1:=b*b+a*a*(-b+0.25);
  form1.Image1.Canvas.Pixels[x,y]:=clred;
  form1.Image1.Canvas.Pixels[-x,-y]:=clred;
  form1.Image1.Canvas.Pixels[-x,y]:=clred;
  form1.Image1.Canvas.Pixels[x,-y]:=clred;
  while b*b*(x+1)<a*a*(y-0.5) do
  begin
  if d1<=0 then
  begin
  d1:=d1+b*b*(2*x+3);
  x:=x+1;
  end
  else
  begin
  d1:=d1+(b*b*(2*x+3)+a*a*(-2*y+2));
  x:=x+1;
  y:=y-1;
  end;
  end;
  form1.Image1.Canvas.Pixels[x,y]:=clred;
  form1.Image1.Canvas.Pixels[-x,-y]:=clred;
  form1.Image1.Canvas.Pixels[-x,y]:=clred;
  form1.Image1.Canvas.Pixels[x,-y]:=clred;
  d2:=b*b*(x+0.5)*(x+0.5)+a*a*(y-1)*(y-1)-a*a*b*b;
  while y>0 do
  begin
  if d2<=0 then
  begin
  d2:=d2+b*b*(2*x+2)+a*a*(-2*y+3);
  x:=x+1;
  y:=y-1;
  end
  else
  begin
  d2:=d2+a*a*(-2*y+3);
  y:=y-1;
  end;
  end;
  form1.Image1.Canvas.Pixels[x,y]:=clred;
  form1.Image1.Canvas.Pixels[-x,-y]:=clred;
  form1.Image1.Canvas.Pixels[-x,y]:=clred;
  form1.Image1.Canvas.Pixels[x,-y]:=clred;
end;
end.
运行程序,显示如下错误:
[Hint] Unit2.pas(46): Value assigned to 'x' never used
[Hint] Unit2.pas(47): Value assigned to 'y' never used
是不是什么地方出现了死循环请多多指教。
急用

解决方案 »

  1.   

    Hint是编译提示吧!
    就算有hint也不算错误的啊~~~~~,可以运行啊~
      

  2.   

    [Hint] Unit2.pas(46): Value assigned to 'x' never used
    [Hint] Unit2.pas(47): Value assigned to 'y' never used提示有两个变量没有使用到。
    应该是你的写法有点问题,没认出x,y来,没有用上
      

  3.   

    可我是按书上c语言算法一步步转换过来的呀,我也知道两个变量没派上用场,可改来改去还是不行呀,lovendll能不能帮我看看什么地方出错了呀
      

  4.   

    别的还没看,
    这里就有问题,x的值被覆盖了: x:=strtoint(edit3.Text); // 先=edit3的内容
      y:=strtoint(edit4.Text);
      x:=0; // 又=0了
      

  5.   

    给自己的代码排排版,就一目了然了Procedure TForm1.Button1Click(Sender: TObject);
    Var
      a, b, x, y: integer;
      d1, d2: real;
    Begin
      form1.Image1.Picture.Bitmap := Tbitmap.Create;
      form1.Image1.Picture.Bitmap.Width := form1.Image1.Width;
      form1.Image1.Picture.Bitmap.Height := form1.Image1.Height;
      a := strtoint(edit1.Text);
      b := strtoint(edit2.Text);
      x := strtoint(edit3.Text);
      y := strtoint(edit4.Text);
      x := 0;
      y := b;
      d1 := b * b + a * a * (-b + 0.25);
      form1.Image1.Canvas.Pixels[x, y] := clred;
      form1.Image1.Canvas.Pixels[-x, -y] := clred;
      form1.Image1.Canvas.Pixels[-x, y] := clred;
      form1.Image1.Canvas.Pixels[x, -y] := clred;
      While b * b * (x + 1) < a * a * (y - 0.5) Do
      Begin
        If d1 <= 0 Then
        Begin
          d1 := d1 + b * b * (2 * x + 3);
          x := x + 1;
        End
        Else
        Begin
          d1 := d1 + (b * b * (2 * x + 3) + a * a * (-2 * y + 2));
          x := x + 1;
          y := y - 1;
        End;
      End;
      form1.Image1.Canvas.Pixels[x, y] := clred;
      form1.Image1.Canvas.Pixels[-x, -y] := clred;
      form1.Image1.Canvas.Pixels[-x, y] := clred;
      form1.Image1.Canvas.Pixels[x, -y] := clred;
      d2 := b * b * (x + 0.5) * (x + 0.5) + a * a * (y - 1) * (y - 1) - a * a * b * b;
      While y > 0 Do
      Begin
        If d2 <= 0 Then
        Begin
          d2 := d2 + b * b * (2 * x + 2) + a * a * (-2 * y + 3);
          x := x + 1;
          y := y - 1;
        End
        Else
        Begin
          d2 := d2 + a * a * (-2 * y + 3);
          y := y - 1;
        End;
      End;
      form1.Image1.Canvas.Pixels[x, y] := clred;
      form1.Image1.Canvas.Pixels[-x, -y] := clred;
      form1.Image1.Canvas.Pixels[-x, y] := clred;
      form1.Image1.Canvas.Pixels[x, -y] := clred;
    End;说几个比较明显的错误1.在类里面使用实例,不符合面向对象的思想2.所有的绘图代码都不在循环中,也就是说你的循环只改变x,y的值,根本没有进行绘图