Autor |
Beitrag |
Jacdelad
      
Beiträge: 109
Win XP Pro
Borland Developer Studio 2006 Architect
|
Verfasst: 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
      
Beiträge: 443
Gentoo Linux, MacOS X, Win 2000
D5 Ent, D7 Ent, Lazarus, Anjuta, MonoDevelop
|
Verfasst: Fr 02.06.06 16:40
Jacdelad hat folgendes geschrieben: | [...] oder muss ich dazu immer eine While- oder Repeat-Schleife nehmen? |
Jepp, genau das.
Bis neulich ...
|
|
fidionael
      
Beiträge: 232
Win XP SP2, Ubuntu 6.06
Delphi 7 PE, Delphi 3 Prof
|
Verfasst: 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 
      
Beiträge: 109
Win XP Pro
Borland Developer Studio 2006 Architect
|
Verfasst: 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
      
Beiträge: 2352
Erhaltene Danke: 4
Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
|
Verfasst: Fr 02.06.06 17:02
Hallo,
z.B. in 10er-Schritten so:
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
      
Beiträge: 212
Win XP
Delphi 2005
|
Verfasst: 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
      
Beiträge: 380
D3 Prof, D4 Prof
|
Verfasst: 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
      
Beiträge: 2889
Erhaltene Danke: 13
W2000, XP
D6E, BDS2006A, DevExpress
|
Verfasst: 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
      
Beiträge: 4106
Erhaltene Danke: 13
Delphi 2010 Pro; Delphi.Prism 2011 pro
|
Verfasst: 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:
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
      
Beiträge: 380
D3 Prof, D4 Prof
|
Verfasst: 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
      
Beiträge: 5284
Erhaltene Danke: 27
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: Fr 02.06.06 20:02
bei c++ geht das glaube ich in for schleifen, da muss man das increment ohnehin angeben
|
|
Jacdelad 
      
Beiträge: 109
Win XP Pro
Borland Developer Studio 2006 Architect
|
Verfasst: 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
      
Beiträge: 2889
Erhaltene Danke: 13
W2000, XP
D6E, BDS2006A, DevExpress
|
Verfasst: Sa 03.06.06 20:06
Neiiiin!
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
      
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)
|
Verfasst: Sa 03.06.06 21:19
Oder (nur zur Ergänzung) die Kurzschreibeweise:
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
      
Beiträge: 232
Win XP SP2, Ubuntu 6.06
Delphi 7 PE, Delphi 3 Prof
|
Verfasst: 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:
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:
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
      
Beiträge: 312
Win 9x, Win XP
Delphi 3pro, 7PE
|
Verfasst: 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.
|
|