Timer in Schleife

Slin61

Mitglied
Hallo Leute. Ich möchte ein Programm erstellen, welches PI bestimmt. Dazu benutze ich die Monte Carlo-Methode, welche zufällige Punkte bestimmt und diese am Einheitskreis prüft. Dabei sollen diese Punkte eingezeichnet werden, aber immer mit einer Pause von 100ms.

Hier erstmal mein Programmcode

Code:
var
  Form1: TForm1;
  xkoo, ykoo : array of integer;

implementation

procedure TForm1.Button1Click(Sender: TObject);
var i,krtr,r,w,s:longint;x,y:real;
begin
krtr:=0;
randomize;
r:=strtoint(edit1.text);


for i:=  0 to r-1 do
  begin
    x:=random; y:= random;
    w:= round(x*341);
    s:= round(y*341);
    setlength(xkoo, r);
    setlength(ykoo, r);
    xkoo[i] := w;
    ykoo[i] := s;

  {Image1.Canvas.Pixels[xkoo[i],ykoo[i]] := clblack;
                                             So werden alle aufeinmal gezeichnet.}
    if x*x + y*y <= 1 then begin inc(krtr); end ;
  end;

  Label1.Caption := floattostr(4*krtr/r);


  {Zeichnen in das Bild }
  Timer1.Enabled := true;


end;

procedure TForm1.Timer1Timer(Sender: TObject);
var   i : Integer;
begin

Image1.Canvas.Pixels[xkoo[i],ykoo[i]] := clblack;
i := i+1;
end;
 
Das Problem ist gelöst und ich war ziemlich blöd^^. Hier ist mein Code :

Code:
procedure TForm1.Button1Click(Sender: TObject);
begin
krtr:=0;
randomize;
r:=strtoint(edit1.text);
counter := 0;

  {Zeichnen in das Bild }
  Timer1.Enabled := true;


end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
counter := counter +1;
i := 0;
    x:=random; y:= random;
    w:= round(x*341);
    s:= round(y*341);
    setlength(xkoo, r);
    setlength(ykoo, r);
    xkoo[i] := w;
    ykoo[i] := s;

    Image1.Canvas.Pixels[xkoo[i],ykoo[i]] := clblack;
    if x*x + y*y <= 1 then begin inc(krtr); end ;

  Label1.Caption := floattostr(4*krtr/r);
if counter = r then   Timer1.Enabled := false;
end;

Alle Variablen sind global
 
Zurück