Autor Beitrag
Jacdelad
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 109

Win XP Pro
Borland Developer Studio 2006 Architect
BeitragVerfasst: Fr 02.06.06 16:37 
Hallo,

nur ne kurze Frage:
Kann ich in einer For-Schleife auch eine andere Schrittweite außer nur 1 bzw. -1 definieren oder muss ich dazu immer eine While- oder Repeat-Schleife nehmen?

Jac

_________________
Es gibt 10 Arten von Menschen: Die einen, die Binärcode verstehen und die, die es nicht tun.
Grendel
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 443

Gentoo Linux, MacOS X, Win 2000
D5 Ent, D7 Ent, Lazarus, Anjuta, MonoDevelop
BeitragVerfasst: Fr 02.06.06 16:40 
user profile iconJacdelad hat folgendes geschrieben:
[...] oder muss ich dazu immer eine While- oder Repeat-Schleife nehmen?

Jepp, genau das.

Bis neulich ...
fidionael
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 232

Win XP SP2, Ubuntu 6.06
Delphi 7 PE, Delphi 3 Prof
BeitragVerfasst: Fr 02.06.06 16:42 
Ich bin mir absolut sicher, dass es eine Möglichkeit gibt die Laufvariable auch in n-Schritten erhöhen zu lassen, aber auf die Schnelle hab ich jetzt nicht gefunden wie... Ich melde mich wenn ich's herausgefunden habe ;)
Jacdelad Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 109

Win XP Pro
Borland Developer Studio 2006 Architect
BeitragVerfasst: Fr 02.06.06 16:47 
Hm, an einer While-Schleife gehe ich nicht ein, also macht euch keine allzu großen Mühen!

Schönes Wochenende,
Jac

_________________
Es gibt 10 Arten von Menschen: Die einen, die Binärcode verstehen und die, die es nicht tun.
Lannes
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2352
Erhaltene Danke: 4

Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
BeitragVerfasst: Fr 02.06.06 17:02 
Hallo,

z.B. in 10er-Schritten so:
ausblenden Delphi-Quelltext
1:
2:
3:
  for z := 0 to 1000 do
    if z mod 10 = 0 then
      Memo1.Lines.add(IntToStr(z));

_________________
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
LLCoolDave
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 212

Win XP
Delphi 2005
BeitragVerfasst: Fr 02.06.06 19:13 
Lannes: Das ist ja wie mit Spatzen auf Kanonen zu schießen. Wenn du in einer Fabrik erst 1000 Produkte zusammenbaust, um am Ende festzustellen, dass du nur jedes 10. davon eigentlich auch haben willst, kriegst du wohl mit Sicherheit erstmal eins vom Chef auf den Deckel und du kannst dir nen neuen Job suchen. Das funktioniert so zwar, ist aber vergleichsweiße langsam, durch das langsame mod und die ganzen ungenutzten Schleifendurchläufe. Am sinnvollsten ist für solche Fälle einfach der Griff zur while Schleife, wie schon gesagt wurde.
oldmax
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 380


D3 Prof, D4 Prof
BeitragVerfasst: Fr 02.06.06 19:21 
Hi

Versuchs mall mit Step

also For i :=0 to n Step 2;//z.B. kann auch -2 oder 3 oder irgendwas sein...

So ging's jedenfalls früher..

Gruß oldmax

_________________
Zier dich nich so, ich krieg dich schon....
alzaimar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2889
Erhaltene Danke: 13

W2000, XP
D6E, BDS2006A, DevExpress
BeitragVerfasst: Fr 02.06.06 19:39 
'Step' in Pascal? Ich kenn das nur von BASIC.

Lange Rede, kurzer Sinn: Mit For-Schleifen kann man nur in einer-Schritten laufen.

_________________
Na denn, dann. Bis dann, denn.
mkinzler
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 4106
Erhaltene Danke: 13


Delphi 2010 Pro; Delphi.Prism 2011 pro
BeitragVerfasst: Fr 02.06.06 19:45 
Es gabe noch die Möglichkeit die Laufvariable der For-Schleife und die "Nutz"-Variable zu trennen.
z.b. Eine Schleife von 0 bis 10 in 1/10-Schritte:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
var
  i: Integer;
  x: Real;
begin
...
  for i := 0 to 100 do 
  begin
     x := i/10;
  end;
...
end;

_________________
Markus Kinzler.
oldmax
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 380


D3 Prof, D4 Prof
BeitragVerfasst: Fr 02.06.06 19:53 
Sorry, mein Fehler.....
....Step ....
geht bei Delphi nich.... schade, hab's aber auch noch nie gebraucht.

Gruß oldmax (der wirklich schon alt wird....)

_________________
Zier dich nich so, ich krieg dich schon....
F34r0fTh3D4rk
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5284
Erhaltene Danke: 27

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: Fr 02.06.06 20:02 
bei c++ geht das glaube ich in for schleifen, da muss man das increment ohnehin angeben
Jacdelad Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 109

Win XP Pro
Borland Developer Studio 2006 Architect
BeitragVerfasst: Sa 03.06.06 20:02 
Naja, ich denke das einfachste ist die Anzahl der Steps zu errechnen und das ganze entsprechend umzurechnen; also bei 3er-Steps mal 3 und so weiter. Danke für die Mithilfe!

Jac

_________________
Es gibt 10 Arten von Menschen: Die einen, die Binärcode verstehen und die, die es nicht tun.
alzaimar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2889
Erhaltene Danke: 13

W2000, XP
D6E, BDS2006A, DevExpress
BeitragVerfasst: Sa 03.06.06 20:06 
Neiiiin!
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
i := 0;
While i < Ende Do Begin
  ...
  i := i + MyStep
End;

Das ist genau das Äquivalente zu einem 'For i:=0 To Ende Step MyStep'

_________________
Na denn, dann. Bis dann, denn.
nullplan001
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 212

Win 2000 Professional, Debian Linux 4.0 (Etch,Stable)
Pascal (FreePascal 2.0.2, TurboPascal 7.0), C(++) (G++/GCC 3.4.2 + MinGW), Java (JDK 1.5.0_07), PHP (PHP 5.1.4)
BeitragVerfasst: Sa 03.06.06 21:19 
Oder (nur zur Ergänzung) die Kurzschreibeweise:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
while i < end do begin
  {...}
  inc(i,Step);
end;

Das hat noch den Vorteil, dass dem Compiler ein Optimierungsschritt erspart wird. Aber das nur am Rande. Und nebenbei würde der Optimierungsschritt je nach Takt der DMA-Einheit wenige Milisekunden dauern. Aber es spart massig Tipparbeit bei langen Variablennamen (statt ewiglangername := ewiglangername + ... nur noch inc(ewiglangername,...))
Tschö,
nullplan

_________________
Ich fahr' nicht selber, weil ich festgestellt habe: ich fahre zu emotional. Bin 180 gefahren wo 30 erlaubt war... -- Jürgen von der Lippe
fidionael
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 232

Win XP SP2, Ubuntu 6.06
Delphi 7 PE, Delphi 3 Prof
BeitragVerfasst: Mo 19.06.06 23:53 
Dies ist zwar ein altes Thema, doch ich hatte ja versprochen mich zu melden wenn ich mich daran erinnere, wie das ging. Ich habe allerdings mit Pointern gearbeitet und eine schöne Lösung ist es definitiv nicht, aber sie funktioniert:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
const step=3;

procedure TForm1.Button1Click(Sender: TObject);
var i: Integer;
begin
  for i:=1 to 15 do begin
    inc(PInteger(@i)^,step-1);
    ShowMessage(IntToStr(i));
  end;
end;

Man ist hier jedoch selbst dafür verantwortlich, dass es nicht zu einer Endlosschleife kommt. Ich rate auch zum Gebrauch der While-Schleife, aber der Vollständigkeit halber :)

Edit1
Wo wir grad bei Vollständigkeit sind, sollte ich vielleicht noch anmerken, dass es natürlich auch via Assembler geht; das Problem bleibt aber das oben angegebene:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
var i,step: Integer;
begin
  step:=3;

  for i:=1 to 15 do begin
    asm
      mov ecx,step
      dec ecx
      add i,ecx
    end;
    ShowMessage(IntToStr(i));
  end;
end;


Zuletzt bearbeitet von fidionael am Di 20.06.06 09:07, insgesamt 2-mal bearbeitet
aim65
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 312

Win 9x, Win XP
Delphi 3pro, 7PE
BeitragVerfasst: Di 20.06.06 00:18 
Außerdem kann man bei While auch mit Floating-Point Zahlen arbeiten - z.B. für Schleifen mit logarithmischen Schrittweiten. Inc & Dec geht dann natürlich nicht.