Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi for schleife in dreierschritten (https://www.delphipraxis.net/90495-schleife-dreierschritten.html)

gandime 18. Apr 2007 15:11


for schleife in dreierschritten
 
hi,
ist es möglich eine for schleife in dreierschritten ablaufen zu lassen sprich:
von 1 auf 4 zu 7 ...

geht das?
wenn ja wie?

mfg
gandime?

bttb930 18. Apr 2007 15:12

Re: for schleife in dreierschritten
 
nicht automatisch, musst du selbst berechnen

Schaedel 18. Apr 2007 15:13

Re: for schleife in dreierschritten
 
Ich schlag eine Whileschleife mit Zählvariable vor die du dann in der Schleife selbst erhöhst.

Viele Grüße

gandime 18. Apr 2007 15:13

Re: for schleife in dreierschritten
 
jop danke dann mache ich das halt mit while

trotzdem danke :-)

BenjaminH 18. Apr 2007 15:15

Re: for schleife in dreierschritten
 
Hallo,
so ginge es:
Delphi-Quellcode:
i:=1;
repeat
//Hier kannst du was tun
i:=i+3;
until i>=7;
Oder du verwendest einfach das dreifache von i:
Delphi-Quellcode:
for i:=0 to 3 do
  ShowMessage(InttoStr(i*3+1));
Ausgabe ist:
1, 4, 7, 10

SirThornberry 18. Apr 2007 15:30

Re: for schleife in dreierschritten
 
Zitat:

Zitat von BenjaminH
Hallo,
so ginge es:
Delphi-Quellcode:
i:=1;
repeat
//Hier kannst du was tun
i:=i+3;
until i>=7;

Du hast aber schon gelesen
Zitat:

...ist es möglich eine for schleife in dreierschritten ablaufen zu lassen...
eine For-Schleife ist Kopfgesteuert :wink:

SebE 18. Apr 2007 15:39

Re: for schleife in dreierschritten
 
Darf ich auch noch was dreckiges, unpraktisches und vor allem fehleranfälliges hinzufügen?

Delphi-Quellcode:
program Project2;

{$APPTYPE CONSOLE}

uses
  SysUtils;

var
  i: BYTE;

type
  PBYTE = ^BYTE;

begin
for i := 1 to 20 do
  begin
  writeln(i);

  PBYTE(@i)^ := PBYTE(@i)^ + 1
  end;

ReadLn
end.
Man muss übel aufpassen, da ja im Hintergrund immer noch "i" inkrementiert wird!
Aber diese Variante verwendet sowieso keiner (sollte man ja auch nicht!)

Was mich verwundert, wenn man bedenkt, dass die "richtige" Zählvariable einer for-Schleife immer rückwärts gezählt wird, wieso hört diese Schleife (in meinem Beispiel) schon eher auf?
Merkt der Compiler, dass man über Pointer auf i zugreift und optimiert er den dann Code nicht?

himitsu 18. Apr 2007 15:43

Re: for schleife in dreierschritten
 
Zitat:

Zitat von SebE
Man muss übel aufpassen, da ja im Hintergrund immer noch "i" inkrementiert wird!
Aber diese Variante verwendet sowieso keiner (sollte man ja auch nicht!)

Was mich verwundert, wenn man bedenkt, dass die "richtige" Zählvariable einer for-Schleife immer rückwärts gezählt wird, wieso hört diese Schleife (in meinem Beispiel) schon eher auf?
Merkt der Compiler, dass man über Pointer auf i zugreift und optimiert er den dann Code nicht?

Aus diesem Grund sollte man diese Variante auch nicht ständig so rumplaudern ... am Ende machen es viele noch so, obwohl sie eigentlich nicht wiessen was sie machen ... und dann beschweren die sich nur wieder, weil es kracht.

Und es wird nicht immer rückwärtsgezählt.
Und nein, eigentlich sollte er nicht mitbekommen, daß darauf "schreibend" zugegriffen wird, denn dann würde der Compiler meckern.
Aber er weiß daß zumindestens lesend direkt darauf zugegriffen wird und daher optimiert er es nicht in dieser weise, daß rückwärts gezählt werden würde.

SirThornberry 18. Apr 2007 15:44

Re: for schleife in dreierschritten
 
@SebE: Das liegt daran das I innerhalb der schleife zwar incrementiert wird (bzw. Decrementiert) aber die Schleifensteuerung (Abbruchbedingungen etc.) nicht mehr auf die Variable aufbaut. Es wird ja bei der Forschleife nur einmal die Bis-Bedingung ausgewertet und danach spielt das keine Rolle mehr.

SebE 18. Apr 2007 15:58

Re: for schleife in dreierschritten
 
Ich weiß, dass das hier überhaupt nicht zum Thema passt, aber:

wenn man den Kopf der For-Schleife abändert:

Delphi-Quellcode:
a := 20;

for i := 1 to a do
...
wird tatsächlich 20 mal durchgelaufen -> i ist nicht mehr die "richtige" Zählvariable
i hat zum Schluss den Wert 39 (innerhalb der Schleife)

Bei Konstanten wird also nicht optimiert, bei Variablen aber schon (wo steckt denn da der Sinn?).

Zitat:

Es wird ja bei der Forschleife nur einmal die Bis-Bedingung ausgewertet und danach spielt das keine Rolle mehr.
stimmt -> wenn man a ändert, passiert nichts in Bezug auf die Schleife.
Aber genau deswegen sollte es ja egal sein, ob Konstante oder Variable verwendet wird!?


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

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