Autor Beitrag
nepleurepas
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 164

Win XP

BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 460

win xp
D5, MySQL, devxpress
BeitragVerfasst: Mo 18.06.07 22:07 
Hi

was genau willst Du denn erreichen?, vielleicht gibts ne andere Lösung.

Gruß

Aga
nepleurepas Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 164

Win XP

BeitragVerfasst: Mo 18.06.07 22:09 
user profile iconAgawain 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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1876
Erhaltene Danke: 129

Win 8.1, Xubuntu 15.10

BeitragVerfasst: 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. :P

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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 164

Win XP

BeitragVerfasst: Mo 18.06.07 22:18 
user profile iconMarc. hat folgendes geschrieben:
Um nur jeden 10ten Schleifendurchlauf zu verwenden, könntest natürlich auch jedesmal prüfen, ob ob deine Laufvariable MOD 10 = 0 ergibt. :P

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. ;)


und was für ein unsinn!!;-) dann muss wohl while do rann :-(

trotzdem thx
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8548
Erhaltene Danke: 477

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Mo 18.06.07 22:19 
Soetwas
ausblenden Delphi-Quelltext
1:
2:
3:
4:
// fehlerhafter Code
for i := 0 to Ende do
  machwas mit i
  i := i+2;
könnte man so machen:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 380


D3 Prof, D4 Prof
BeitragVerfasst: 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
ausblenden Delphi-Quelltext
1:
Zaehlvar:=Zaehlvar+x;					


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
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 779
Erhaltene Danke: 1

Vista, XP, W2K
Delphi, .Net, Deutsch und Englisch
BeitragVerfasst: Di 19.06.07 07:09 
user profile iconMarc. hat folgendes geschrieben:
Ansonsten ist sowas meines Erachtens nur in C/C++ möglich. ;)


Oder auch anderen Sprachen ;)

For i = 0 To 200 Step 5...das vermisse ich am meisten :(

_________________
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 380


D3 Prof, D4 Prof
BeitragVerfasst: 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
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: Di 19.06.07 09:48 
:gruebel: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 612

WIN 2000, WIN XP, Mac OS X
D7 Enterprise, XCode, Eclipse, Ruby On Rails
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 779
Erhaltene Danke: 1

Vista, XP, W2K
Delphi, .Net, Deutsch und Englisch
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Veteran
Beiträge: 6366
Erhaltene Danke: 60

Windows 7, Ubuntu
Delphi 7 Prof.
BeitragVerfasst: Di 19.06.07 10:56 
Hi,
user profile iconStefan.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:

ausblenden 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:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
var
      i : integer;
begin
   i := 1;
   while (i < 101do 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 612

WIN 2000, WIN XP, Mac OS X
D7 Enterprise, XCode, Eclipse, Ruby On Rails
BeitragVerfasst: Di 19.06.07 12:10 
user profile iconKlabautermann hat folgendes geschrieben:
Hi,
ausblenden 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;



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. :wink:

Stefan

_________________
Ein Computer ohne Windows ist wie eine Schokoladentorte ohne Senf.
Klabautermann
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Veteran
Beiträge: 6366
Erhaltene Danke: 60

Windows 7, Ubuntu
Delphi 7 Prof.
BeitragVerfasst: Di 19.06.07 13:55 
Hi,
user profile iconStefan.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. :wink:

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 wennuser profile iconnepleurepas versteht warum es funktioniert hat er eine menge über Zeiger gelernt ;).
Raffo
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 300



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Veteran
Beiträge: 6366
Erhaltene Danke: 60

Windows 7, Ubuntu
Delphi 7 Prof.
BeitragVerfasst: Di 19.06.07 16:38 
Hi,
user profile iconRaffo 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