Einzelnen Beitrag anzeigen

ChristianR

Registriert seit: 4. Mai 2009
22 Beiträge
 
#1

Pause während Schleifendurchlauf

  Alt 16. Nov 2010, 12:39
Delphi-Version: 5
Guten Tag,
habe eine klitzekleine Frage bezüglich meines Programmes. Und zwar habe ich das Sieb des Eratosthenes programmiert. Der Algorithmus funktioniert auch soweit. Jetzt versuche ich das Prinzip optisch darzustellen. Hierbei möchte ich, dass der alle vielfachen einer gefundenen primzahl streicht. Habe dynamisch 100 Panels erzeugt. Die Zahlen bis 100 sind in einem Array gespeichert. Jedes mal wenn keine Primzahl beim schleifendurchlauf gefunden worden ist wird der wert im Array auf true gesetzt. Jetzt soll dieses Panel was true gesetzt worden ist rot gefärbt werden und nach einer bestimmten zeit dann ganz verschwinden.(visible := false und das ganze geht von vorne los, bis alle nicht Primzahlen makiert bzw unsichtbar gesetzt worden sind.
Habe das jetzt so probiert aber wenn ich auf den Button drücke passiert einfach nichts. Wenn ich nur Farben oder Visible := false setze funktioniert es, aber es geht mir zu schnell. Ich möchte, das man es der Reihe nach sieht wie die nicht Primzahlen "gelöscht" werden.

Hier mal mein Code:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var j,l,o:integer;
begin



j := 2;
// while Schleife solange durchlaufen bis die Quadratzahl des Indexes
// größer ist als die eingegebene Zahl
while j*j <= 100 Do begin

// prüfen ob der Arraywert bei j false ist, wenn ja handelt es sich um eine Primzahl
    if( gestrichen[j] = false) then begin
// alle mehrfachen von j auf true setzen und damit als Primzahl ausschliessen

        l:=j*j;
        while l <= 100 do begin

             gestrichen[l]:=true;
             if gestrichen[l] = true then
             begin
               TPanel(FindComponent('number'+inttostr(l))).Color := clRed;
               sleep(1000);
               TPanel(FindComponent('number'+inttostr(l))).Visible := false;
             end;
             l:=l+j;

        end;

    end;

            j:= j+1;
end;


end;
Ich hoffe, das es so verständlich genug erklärt ist und mir jemand helfen kann
Habe wahrscheinlich grade wieder nur ein Brett vor dem Kopf.
Besten Dank Christian
  Mit Zitat antworten Zitat