Delphi-PRAXiS
Seite 3 von 4     123 4      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi For-do Schleife mit Sprung (https://www.delphipraxis.net/13032-do-schleife-mit-sprung.html)

Pseudemys Nelsoni 10. Dez 2003 06:11

Re: For-do Schleife mit Sprung
 
Zitat:

goil! das ist ja end-praktisch. man sollte die while schleifen weglassen, die sind ja voll überflüssig
ich find die wichtiger als die Repeat schleife :\

phlux 10. Dez 2003 13:07

Re: For-do Schleife mit Sprung
 
Beide Schleifen sind wichtig, vllt solltet ihr euch mal klar machen was der Unterschied zwischen einer "Kopf" und ner "Fuß" gesteuerten Schleife ist ;)

nailor 10. Dez 2003 14:55

Re: For-do Schleife mit Sprung
 
[offtopic] das Gegenteil von "Kopf" gesteuert ist "Schwanz" gesteuert [/offtopic]

Mein Beitrag mit "goil! dann..." war ironisch gemeint. Das nur nochmal für alle, denen das nicht ganz klar war.
Fakt ist, dass man ausgehen von einer while-Schleife die beiden anderen relativ schnell geschrieben hat:

bei der repeat-Schleife:

Delphi-Quellcode:
anweisung;
while ISTrue do
anweisung;
bei der for schleife:

Delphi-Quellcode:
while soOft >= 0 do
begin
dec(soOft);
anweisung;
end;
aber wer will das schon immer machen. Also doch gut, dass es alle drei gibt!

d3g 10. Dez 2003 16:08

Re: For-do Schleife mit Sprung
 
Zitat:

Zitat von Nailor
Allerdings habe ich immer gedacht, dass Schleifen intern anders funktionieren, und Luckies Gebastel daher eh nicht funktioniert.

Wenn der Optimierer Lust dazu hat, ist das auch so. Dann wird das CX-Register als Schleifenvariable benutzt und der Sprung funktioniert mit dem LOOP-Befehl statt mit einem CMP- und einem JZ-Befehl (braucht 3 Takte weniger). Der Nachteil ist natürlich, dass die Schleife dann rückwärts läuft, was nicht immer gewollt ist und was du ganz hart zu spüren bekommst, wenn der Optimierer mal Amok läuft.

F.W. 10. Dez 2003 17:11

Re: For-do Schleife mit Sprung
 
Ich denke, ich werde mich für den Code von himitsu entscheiden, der ist für mich(auf Grund meiner Erfahrung und Faulheit) der Beste.

Danke für die vielen Antworten!. :thuimb:

nailor 10. Dez 2003 18:24

Re: For-do Schleife mit Sprung
 
noch ein tipp: du musst nichtmal bis "maxZahl div 2" durchgehen. "ceil(sqrt(maxZahl))" reicht!

F.W. 12. Dez 2003 19:30

Re: For-do Schleife mit Sprung
 
Die Anweisung kann ja schnell mal 10 Sekunden (und meistens noch drüber) dauern. Damit ich Fortschritte sehen kann, habe ich mir was ausgedacht:

Ich nehme mir die Startzeit und die Endzeit und führe dann SecondsBetween(...) aus. Allerdings ist eine Sekunde bei solchen größenverhältnissen nicht gerade genau. Aber mit einem Timer(der dann aller 10 ms den Zeitwert erhöht) kann ich's nicht machen, weil der ja seine Anweisungen erst nach der Beendigung der Primzahlsuche fortsetzt.

Habt ihr noch 'ne Idee?

Luckie 12. Dez 2003 19:34

Re: For-do Schleife mit Sprung
 
wie wird der Fortschritt angezeiht? Ruf in der Schleife mal die Refresh-Methode der entsprechenden Komponent auf. Oder pack das in einen Thread und lass dir vom Thread eine Message an dein fenster schicken bei jedem Fortschritt.

F.W. 14. Dez 2003 18:47

Re: For-do Schleife mit Sprung
 
Also der Fortschritt wird über eine TProgressBar angezeigt. Das habe ich schon ziemlich optimiert. Aber darüber sehe ich ja nicht, wie lange es von Zahl X bis Zahl Y gesucht hat. Ich habe ja schon oben meine momentane Zeitmessmethode beschrieben. Aber wie kann ich es Zehntelsekundengenau machen?

Wie meinst du das, mit der Refresh-Methode? Soll ich einen Timer mit der Aufgabe "Benötigte Zeit := Benötigte Zeit + 0,01" und den dann mit der Refresh-Methode aufrufen?

nailor 14. Dez 2003 18:51

Re: For-do Schleife mit Sprung
 
Luckie meinte, dass wenn du innerhalb deiner Methode den Progress erhöhst, man das trotzdem erst sehen wird, wenn deine Methode fertig abgearbeitet ist. Um das zu verhindern, und zwischendurch die ANzeige auf den aktuellen Stand, sollte man irgendwas von wegen Repaint/Refresh/Update einbauen [aber nicht ZU OFT, sonst wirds merklich langsamer]


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:39 Uhr.
Seite 3 von 4     123 4      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz