Delphi-PRAXiS
Seite 2 von 3     12 3      

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)

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.


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:38 Uhr.
Seite 2 von 3     12 3      

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