![]() |
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? |
Re: for schleife in dreierschritten
nicht automatisch, musst du selbst berechnen
|
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 |
Re: for schleife in dreierschritten
jop danke dann mache ich das halt mit while
trotzdem danke :-) |
Re: for schleife in dreierschritten
Hallo,
so ginge es:
Delphi-Quellcode:
Oder du verwendest einfach das dreifache von i:
i:=1;
repeat //Hier kannst du was tun i:=i+3; until i>=7;
Delphi-Quellcode:
Ausgabe ist:
for i:=0 to 3 do
ShowMessage(InttoStr(i*3+1)); 1, 4, 7, 10 |
Re: for schleife in dreierschritten
Zitat:
Zitat:
|
Re: for schleife in dreierschritten
Darf ich auch noch was dreckiges, unpraktisches und vor allem fehleranfälliges hinzufügen?
Delphi-Quellcode:
Man muss übel aufpassen, da ja im Hintergrund immer noch "i" inkrementiert wird!
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. 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? |
Re: for schleife in dreierschritten
Zitat:
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. |
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.
|
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:
wird tatsächlich 20 mal durchgelaufen -> i ist nicht mehr die "richtige" Zählvariable
a := 20;
for i := 1 to a do ... 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:
Aber genau deswegen sollte es ja egal sein, ob Konstante oder Variable verwendet wird!? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:43 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz