Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Bei einer For Schleife einen Durchgang überspringen (https://www.delphipraxis.net/117167-bei-einer-schleife-einen-durchgang-ueberspringen.html)

buster55 13. Jul 2008 11:24


Bei einer For Schleife einen Durchgang überspringen
 
ich denke der titel scheint recht eindeutig aber noch mal eine beschreibung meines problems:
gibt es einen befehl den man in einer if-bedingung, die sich wiederrum in einer for schleife befindet , verwenden kann ,damit die forschleife den aktuellen durchgang abbricht und beim nächsten durchlauf weitermacht?
ich kenne nur skip; und break; aber die brechen die ganze for schleife ab :?

mkinzler 13. Jul 2008 11:26

Re: Bei einer For Schleife einen Durchgang überspringen
 
Den durchzuführenden Code in den Else-Zweig ausführen

buster55 13. Jul 2008 11:42

Re: Bei einer For Schleife einen Durchgang überspringen
 
mmh das macht meiner ansicht nach keinen sinn, denn ich möchte richedit line für line mit einer for schleife abarbeiten und zuvor mit der if klären ob die zeile die gerade an der eihe ist gültig ist. wenn nicht soll sie praktisch übersprungen werden

Apollonius 13. Jul 2008 11:43

Re: Bei einer For Schleife einen Durchgang überspringen
 
Das entsprechende Schlüsselwort heißt Continue.

Matze 13. Jul 2008 11:44

Re: Bei einer For Schleife einen Durchgang überspringen
 
Wäre Delphi-Referenz durchsuchencontinue hier nichts für dich?

Zitat:

In Delphi bewirkt Continue, dass der nächste Durchlauf der for-, while- oder repeat-Anweisung ausgeführt wird.
Grüße

Edit: Zu langsam, mal wieder.

mkinzler 13. Jul 2008 11:44

Re: Bei einer For Schleife einen Durchgang überspringen
 
Klar. dehalb den Code innerhalb der Abfrage, entwser im If oder else

buster55 14. Jul 2008 13:18

Re: Bei einer For Schleife einen Durchgang überspringen
 
ok danke an alle
continue;
war genau das richtige ;-)

Andy386 18. Jul 2008 10:23

Re: Bei einer For Schleife einen Durchgang überspringen
 
Mir ist gestern was interessantes aufgefallen: Mein Delphi hat die for-schleife
Delphi-Quellcode:
for i:=0 to ende do
irgendwas;
so kompliert:
SQL-Code:
wiederhole (ende-0) Mal: "irgendwas;"
Hat mich tierisch angekotzt, dass D nicht richtig abfragt....

mkinzler 18. Jul 2008 10:33

Re: Bei einer For Schleife einen Durchgang überspringen
 
Was hat er nicht richtig abgefragt?

RavenIV 18. Jul 2008 10:42

Re: Bei einer For Schleife einen Durchgang überspringen
 
Zitat:

Zitat von Andy386
Mir ist gestern was interessantes aufgefallen: Mein Delphi hat die for-schleife
Delphi-Quellcode:
for i:=0 to ende do
irgendwas;
so kompliert:
SQL-Code:
wiederhole (ende-0) Mal: "irgendwas;"
Hat mich tierisch angekotzt, dass D nicht richtig abfragt....

Was soll hier falsch sein?

gammatester 18. Jul 2008 11:15

Re: Bei einer For Schleife einen Durchgang überspringen
 
Zitat:

Zitat von RavenIV
Zitat:

Zitat von Andy386
Mir ist gestern was interessantes aufgefallen: Mein Delphi hat die for-schleife
Delphi-Quellcode:
for i:=0 to ende do
irgendwas;
so kompliert:
SQL-Code:
wiederhole (ende-0) Mal: "irgendwas;"
Hat mich tierisch angekotzt, dass D nicht richtig abfragt....

Was soll hier falsch sein?

Das ganze "irgendwas" müßte ende+1 mal ausgeführt werden. Allerdings kann ich nicht überpüfen, ob wirklich so ein Code erzeugt wird.

Gruß Gammatester

RavenIV 18. Jul 2008 11:33

Re: Bei einer For Schleife einen Durchgang überspringen
 
Zitat:

Zitat von gammatester
Das ganze "irgendwas" müßte ende+1 mal ausgeführt werden. Allerdings kann ich nicht überpüfen, ob wirklich so ein Code erzeugt wird.

Falsch.
Die Schleife wird durchlaufen, solange i < ende ist. Also von 0 bis ende - 1.
Somit genau ende-mal.

Wenn du es ende+1-mal durchlaufen lassen willst, dann must Du die Abbruchkritierien anderst setzen.
Oder nen anderen Schleifentyp einsetzten.

Apollonius 18. Jul 2008 11:35

Re: Bei einer For Schleife einen Durchgang überspringen
 
Du passt dich wohl schon für deinen neuen Job an C an. :P
Aber gammatester hat Recht. Sonst wäre ja auch die klassische Schleife von 0 bis Count - 1 falsch.

RavenIV 18. Jul 2008 11:52

Re: Bei einer For Schleife einen Durchgang überspringen
 
Zitat:

Zitat von Apollonius
Du passt dich wohl schon für deinen neuen Job an C an. :P
Aber gammatester hat Recht. Sonst wäre ja auch die klassische Schleife von 0 bis Count - 1 falsch.

Jetzt, wo Du es sagst. Das hat was.
Passiert in Irgendwas vielleicht eine Exception, wenn i auf ende steht?
Dann würde er doch auch aus der Schleife rausfallen, oder?
Zeig doch mal mehr Code, so ist es ein lustiges Ratespiel.

Vermutlich geht der Schalter schon langsam Richtung C-Systax ;-)

Andy386 18. Jul 2008 17:15

Re: Bei einer For Schleife einen Durchgang überspringen
 
Aso, ende-0-1 kann auch sein.
Aber mein Problem war, dass es D völlig egal ist, welchen Wert i dann [edit](während des Laufens durch die for-schleife)[/edit] hat!
Ich z.B. habe i im watch/... geändert. Wollte nicht 999Mal auf F9 drücken. Da aber nicht auf das For-Kritertium geprüft wurde, kam es zu einem Überlauf (i war gleichzeitig ein Array-index)
[edit] Da D seine 1000 Läufe vollbekommen wollte[/edit]

OregonGhost 18. Jul 2008 17:23

Re: Bei einer For Schleife einen Durchgang überspringen
 
Du änderst eine Variable im Debugger und wunderst dich, dass es nicht mehr hinhaut? Im regulären Code kann i niemals geändert werden im Rumpf der For-Schleife, also ist das eine korrekte Optimierung. Wenn du eine For-Schleife überspringen willst, kannst du einen Breakpoint dahinter setzen. Oder, wenn es zum Beispiel der letzte Lauf sein soll, nimmst du eben einen bedingten Breakpoint.

alzaimar 18. Jul 2008 19:14

Re: Bei einer For Schleife einen Durchgang überspringen
 
Zum Verständnis: Rückwärts bis 0 zählen ist schneller, als vorwärts bis N.

littleDave 18. Jul 2008 19:38

Re: Bei einer For Schleife einen Durchgang überspringen
 
Zitat:

Zitat von alzaimar
Zum Verständnis: Rückwärts bis 0 zählen ist schneller, als vorwärts bis N.

wieso? :gruebel:

Apollonius 18. Jul 2008 19:52

Re: Bei einer For Schleife einen Durchgang überspringen
 
Weil du dann direkt auf das dec ein jnz @@Loop folgen lassen kannst, ohne noch einen Vergleich durchführen zu müssen.

littleDave 18. Jul 2008 20:04

Re: Bei einer For Schleife einen Durchgang überspringen
 
Zitat:

Zitat von Apollonius
Weil du dann direkt auf das dec ein jnz @@Loop folgen lassen kannst, ohne noch einen Vergleich durchführen zu müssen.

Ah, stimmt - hatte den JNZ Befehl nicht gedacht.

Codewalker 18. Jul 2008 20:05

Re: Bei einer For Schleife einen Durchgang überspringen
 
Oder allgemeiner: Es geht schneller einen Wert gegen 0 zu prüfen, als gegen einen anderen Wert (Für Prüfung mit 0 gibt es in Assembler direkte Anweisungen)

Edit: Möhp, zu langsam

Apollonius 18. Jul 2008 20:08

Re: Bei einer For Schleife einen Durchgang überspringen
 
Zitat:

Zitat von Codewalker
Für Prüfung mit 0 gibt es in Assembler direkte Anweisungen

Nur wenn es um Register geht. Dann kannst du test reg, reg nehmen. Für Speicherstellen-Operanden gilt das nicht.


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:18 Uhr.

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