![]() |
Re: Step wie noch mal ?
Delphi-Quellcode:
for i := 0 to 100 {step 3} do
begin // mach was mit i i := i + 2; // es gibt einen Hack, womit man die Variable sezten kann, // aber da muß man aufpassen, denn daß hier wird eine "Endlosschleife", // da die Abbruchbedingung i=100 nicht erreicht wird > 93 96 99 102 ... end; |
Re: Step wie noch mal ?
Hallo,
es ist eine technische Spielerei, aber ich konnte einfach nicht widerstehen:
Delphi-Quellcode:
Die Klasse und die Hilfsfunktion Range würde man natürlich in eine eigene Unit verfrachten.
type
TLoop = class private FFrom : Integer; FTo : Integer; FStep : Integer; FCurrent : Integer; public constructor Create (const aFrom, aTo: Integer); function MoveNext: Boolean; function Step (const aStep: Integer): TLoop; function GetEnumerator: TLoop; property Current: Integer read FCurrent; end; constructor TLoop.Create (const aFrom, aTo: Integer); begin FFrom := aFrom; FTo := aTo; Step(1); end; function TLoop.Step (const aStep: Integer): TLoop; begin FStep := aStep; FCurrent := FFrom - FStep; Result := Self; end; function TLoop.GetEnumerator: TLoop; begin Result := Self; end; function TLoop.MoveNext: Boolean; begin Inc (FCurrent, FStep); if (FStep < 0) then Result := (FCurrent >= FTo) else Result := (FCurrent <= FTo); end; function Range (const aFrom, aTo: Integer): TLoop; begin Result := TLoop.Create(aFrom, aTo); end; // Anwendung: procedure TForm1.btnEnumeratorClick (Sender: TObject); var i : Integer; begin Memo.Clear; for i in Range(12, 51).Step(7) do Memo.Lines.Add (IntToStr(i)); Memo.Lines.Add(''); for i in Range(20, 0).Step(-3) do Memo.Lines.Add (IntToStr(i)); end; Gruß Hawkeye |
Re: Step wie noch mal ?
Zitat:
Delphi-Quellcode:
Edit: Da ich per PN geschimpft wurde, sowas zu zeigen...
Inc(PInteger(@i)^, 2);
Ne so schlimm war die PN nich, aber hier halt ein Hinweis zum beachten: Manipuliert man Delphis Schleifenvariable, kann dies zu unerwünschten Ergebnissen, wie zB. Endlosschleifen und AVs führen. Man sollte dies nur machen, wenn man genau weiß was man macht, oder gleich die Finger davon lassen. :mrgreen: Noch eine saubere Methode:
Delphi-Quellcode:
Ist 0 nicht gewünscht mit 1 beginnen
for i := 0 to 100 {step 3} do begin
If i mod 3<>0 then continue; // Mach was mit i end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:04 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