Autor |
Beitrag |
nepleurepas
      
Beiträge: 164
Win XP
|
Verfasst: Mo 18.06.07 22:04
Hallo,
wie kann ich erreichen, dass die laufvariable meiner for-schleife sich pro durchlauf um 3 erhöht?
habs mal mit i:= i+2 versucht, ging nicht.
Hoffe ihr könnt mir helfen.
danke, stefan
|
|
Agawain
      
Beiträge: 460
win xp
D5, MySQL, devxpress
|
Verfasst: Mo 18.06.07 22:07
Hi
was genau willst Du denn erreichen?, vielleicht gibts ne andere Lösung.
Gruß
Aga
|
|
nepleurepas 
      
Beiträge: 164
Win XP
|
Verfasst: Mo 18.06.07 22:09
Agawain hat folgendes geschrieben: | Hi
was genau willst Du denn erreichen?, vielleicht gibts ne andere Lösung.
Gruß
Aga |
es geht um sodoku. ne andere möglichkeit wäre natürlich mit einer stinknormalen while do schleife zu arbeiten, und von hand zu erhöhen. Dies wollte ich aber zwecks übersichtlichkeit im quelltext vermeiden.
|
|
Marc.
      
Beiträge: 1876
Erhaltene Danke: 129
Win 8.1, Xubuntu 15.10
|
Verfasst: Mo 18.06.07 22:12
Um nur jeden 10ten Schleifendurchlauf zu verwenden, könntest natürlich auch jedesmal prüfen, ob ob deine Laufvariable MOD 10 = 0 ergibt.
Na, das ist Unsinn. Vllt. hat ja noch jmd. anders eine Lösung parat.
Ansonsten ist sowas meines Erachtens nur in C/C++ möglich. 
|
|
nepleurepas 
      
Beiträge: 164
Win XP
|
Verfasst: Mo 18.06.07 22:18
|
|
Gausi
      
Beiträge: 8548
Erhaltene Danke: 477
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: Mo 18.06.07 22:19
Soetwas Delphi-Quelltext 1: 2: 3: 4:
| for i := 0 to Ende do machwas mit i i := i+2; | könnte man so machen:
Delphi-Quelltext 1: 2:
| for i := 0 to Ende DIV 3 do machwas mit 3*i |
Ansonsten: While- oder Repeat-Schleifen
_________________ We are, we were and will not be.
|
|
oldmax
      
Beiträge: 380
D3 Prof, D4 Prof
|
Verfasst: Di 19.06.07 06:35
Hi
Nun mal ganz einfach: eine Schleifenvariable innerhalb einer Schleife durch irgendwelche Rechenoperationen beeinflussen ist nicht grad toller Programmierstil.
Nehmt für sowas eine separate Variable, setzt diese vor der Schleife auf den gewünschten Anfangswert und dann, wenn um x erhöt werden soll, diese tolle Anweisung
Delphi-Quelltext
Ok, ansonsten übt euch mit While .. do.. Schleifen oder der hübschen Repeat ... until
Alles andere ist Murks.
Gruß oldmax
_________________ Zier dich nich so, ich krieg dich schon....
|
|
ene
      
Beiträge: 779
Erhaltene Danke: 1
Vista, XP, W2K
Delphi, .Net, Deutsch und Englisch
|
Verfasst: Di 19.06.07 07:09
_________________ Wir, die guten Willens sind, geführt von Ahnungslosen, Versuchen für die Undankbaren das Unmögliche zu vollbringen.
Wir haben soviel mit so wenig so lange versucht, daß wir jetzt qualifiziert sind, fast alles mit Nichts zu bewerkstelligen.
|
|
oldmax
      
Beiträge: 380
D3 Prof, D4 Prof
|
Verfasst: Di 19.06.07 09:33
Hi
Zitat: | For i = 0 To 200 Step 5...das vermisse ich am meisten |
Auch wenn ich sowas bisher nicht gebraucht hab, aber läßt sich das nicht auch mit
Delphi-Quelltext 1:
| For i:=1 to 40 do y:=(i-1)*5; |
lösen ?
Gruß oldmax
_________________ Zier dich nich so, ich krieg dich schon....
|
|
elundril
      
Beiträge: 3747
Erhaltene Danke: 123
Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
|
Verfasst: Di 19.06.07 09:48
 seltsam! bei mir sagt mein delphi immer das ich auf die Laufvariable in der Schleife selbst keinen zugriff haben darf.
an was könnte das liegen?
lg elundril
|
|
Stefan.Buchholtz
      
Beiträge: 612
WIN 2000, WIN XP, Mac OS X
D7 Enterprise, XCode, Eclipse, Ruby On Rails
|
Verfasst: Di 19.06.07 09:59
Der Wert der Laufvariable in der Schleife ist unveränderlich. Du musst eine zusätzliche Variable deklarieren und selbst mit der gewünschten Schrittweite hochzählen.
Stefan
_________________ Ein Computer ohne Windows ist wie eine Schokoladentorte ohne Senf.
|
|
ene
      
Beiträge: 779
Erhaltene Danke: 1
Vista, XP, W2K
Delphi, .Net, Deutsch und Englisch
|
Verfasst: Di 19.06.07 10:12
Vom Prinzip würde das gehen, aber das direkte Step fehlt mir halt und dann wirds immer eine While...Wend Schleife. Denn im 3D hat man schon genug Laufvariablen 
_________________ Wir, die guten Willens sind, geführt von Ahnungslosen, Versuchen für die Undankbaren das Unmögliche zu vollbringen.
Wir haben soviel mit so wenig so lange versucht, daß wir jetzt qualifiziert sind, fast alles mit Nichts zu bewerkstelligen.
|
|
Klabautermann
      

Beiträge: 6366
Erhaltene Danke: 60
Windows 7, Ubuntu
Delphi 7 Prof.
|
Verfasst: Di 19.06.07 10:56
Hi, Stefan.Buchholtz hat folgendes geschrieben: | Der Wert der Laufvariable in der Schleife ist unveränderlich. Du musst eine zusätzliche Variable deklarieren und selbst mit der gewünschten Schrittweite hochzählen. |
wer wird denn so absolutistisch sein. Sagen wir lieber: Der Wert der Laufvariable in der Schleife ist auf direkten Weg unveränderlich. Pascal erlaubt es nicht die Zählvariable in der Schleife zu verändern was wohl auf seine Herkunft als Lehrsprache zurück zu führen ist. Das heisst aber nicht das man es nicht tun kann wenn man genug "Schmutzige Tricks" anwendet. Auch wenn die Angabe eine Schrittweite sehr praktisch währe geht es wie oben beschrieben auf mit ein paar Mathematischen Kniffen. Der Vollständigkeit halber hier einmal der Weg wie man die Zählvariable manipulieren kann aber das ist absoluter Programmier Schmutz und sollte nicht verwendet werden: Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7:
| var i : integer; begin for i := 1 to 100 do begin LongInt(Addr(i)^) := i + 2; end; end; | Wie schmutzig das ist erkennt man daran, dass die obere Schleife eine Endlosschleife ist, ganz einfach aus dem Grund, dass die 100 nie erreicht wird (es wird ja von i=99 direkt auf i=102 gesprungen) außerdem ist dieses Konstrukt nur eine lumpige Zeile kürzer als die Saubere Version: Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| var i : integer; begin i := 1; while (i < 101) do begin inc(i, 3); end; end; | Von daher nimm lieber die while du hast weniger Scherereien damit, du wirst nicht in den ruf kommen ein Pfuscher zu sein und das wird im Gegensatz zu der for Variante auch noch mit Delphi.NET funktionieren. Gruß Klabautermann
|
|
Stefan.Buchholtz
      
Beiträge: 612
WIN 2000, WIN XP, Mac OS X
D7 Enterprise, XCode, Eclipse, Ruby On Rails
|
Verfasst: Di 19.06.07 12:10
_________________ Ein Computer ohne Windows ist wie eine Schokoladentorte ohne Senf.
|
|
Klabautermann
      

Beiträge: 6366
Erhaltene Danke: 60
Windows 7, Ubuntu
Delphi 7 Prof.
|
Verfasst: Di 19.06.07 13:55
Hi, Stefan.Buchholtz hat folgendes geschrieben: | Wir haben hier im Büro ein kleines Sparschwein stehen, wo bei besonders schweren Programmierverbrechen der Täter eine kleine Strafe einzahlen muss. Für dieses Konstrukt wären mindestens 5 Euro fällig.  |
und das absolut zu recht. Ich wollte nur nicht verschweigen das es technisch möglich ist. Benutzt habe ich ein ähnliches Konstrukt erst ein einziges mal - als Antwortoption auf eine Gewinnspielfrage hier im Forum  . In ein Programm würde ich so etwas nie schreiben. Gruß Klabautermann PS: und wenn nepleurepas versteht warum es funktioniert hat er eine menge über Zeiger gelernt  .
|
|
Raffo
      
Beiträge: 300
|
Verfasst: Di 19.06.07 16:13
Da sieht man mal wieder, wie ein "Rückschritt" zur "Moderne" wird, gab es das nicht schon in den 80igern von wegen Basic:
For i:=0 to 10 step 3
|
|
Klabautermann
      

Beiträge: 6366
Erhaltene Danke: 60
Windows 7, Ubuntu
Delphi 7 Prof.
|
Verfasst: Di 19.06.07 16:38
Hi, Raffo hat folgendes geschrieben: | Da sieht man mal wieder, wie ein "Rückschritt" zur "Moderne" wird, gab es das nicht schon in den 80igern von wegen Basic:
For i:=0 to 10 step 3 |
Erstens gab es Pascal schon vor den 80ern und zweitens ist es in den meisten Programmiersprachen möglich die Schrittweite Dynamisch an zu passen. Am besten gefallen mir die C-Artigen for-Schleifen, denn da muss die Abbruch Bedingung nicht mal was mit dem Zähler zu tun haben for (int i = 1; i < 101; i += 3) währe die hier gefragte Schleife for (int i = 1; Spalte[i].Name == 'Meier'; i += 3) währe aber auch eine mögliche for Schleife. Ich denke kaum ein Delphi-Programmierer hätte was dagegen wenn die For-Schleife einen aquivalent zu deinem Step Operator bekäme, aber solange kommen wir auch ohne aus  . Gruß Klabautermann
|
|