![]() |
FOR-Schleifen-Start während Durchlauf +1 zählen
Hey!
Für eine Berechnung von ausschließlich ungraden Zahlen in einer FOR-Schleife (For zaehler:=start To ende Do Begin) muss 'zaehler' während des Durchlaufs immer schon um 1 erhöht werden, damit er beim nächsten z.B. direkt von 1 auf 3 springt. Weiß jemand, wie das geht? Wenn ichs mit zaehler:=zaehler+1 mache, bekomm ich nur nen Fehler ([Error] Unit1.pas(530): Assignment to FOR-Loop variable 'zaehler'). |
Re: FOR-Schleifen-Start während Durchlauf +1 zählen
Mach es mit einer WHILE Schleife
|
Re: FOR-Schleifen-Start während Durchlauf +1 zählen
Es gibt eine Variante, aber die sollte man glaube ich nicht anwenden...
verwende als Ersatz eine While x=... do - Schleife! |
Re: FOR-Schleifen-Start während Durchlauf +1 zählen
Das Problem ist, dass ich das für Informatik brauche und es dort mit einer FOR-Schleife gemacht werden muss...
Welche Variante wär das denn? |
Re: FOR-Schleifen-Start während Durchlauf +1 zählen
Zitat:
...:cat:... |
Re: FOR-Schleifen-Start während Durchlauf +1 zählen
Dann mach doch einfach:
Delphi-Quellcode:
Edit: Tag korriegiert
If Zaehler mod 2 <> 0
|
Re: FOR-Schleifen-Start während Durchlauf +1 zählen
Entkoppele die Laufvariable von der in der Schleife verwendeten.:
Delphi-Quellcode:
For i := 0 to ... do
begin i2 := i*2+1; ... end; |
Re: FOR-Schleifen-Start während Durchlauf +1 zählen
Delphi-Quellcode:
Wie setze ich das nun wieder ein?
procedure TForm1.Button3Click(Sender: TObject);
var zaehler,zaehler2,ende,start: Integer; zahl: Real; begin start:=StrToInt(Edit12.text); ende:=StrToInt(edit14.Text); zahl:=1; For zaehler:=start To ende Do Begin zahl:=zahl+zaehler; zaehler2:=zaehler+1; end; edit13.text:=FloatToStr(zahl); end; Weil, wenn ich zaehler=zaehler2 wähle, bekomm ich wieder den gleichen Fehler wie zum Anfang. Das hatte ich ja auch schonmal ausprobiert... |
Re: FOR-Schleifen-Start während Durchlauf +1 zählen
Man sollte den Zähler der Schleife nicht manuell verändern.
|
Re: FOR-Schleifen-Start während Durchlauf +1 zählen
Gibts denn sonst noch ne Möglichkeit, dass man innerhalb einer Schleife halt nur die ungraden Zahlen addiert?
Das Problem ist, dass ich in der Stunde leider nicht da war und deswegen leider grad vor dem Problem stehe. |
Re: FOR-Schleifen-Start während Durchlauf +1 zählen
Zitat:
|
Re: FOR-Schleifen-Start während Durchlauf +1 zählen
Zitat:
Addiere nur die ungeraden Zahlen. Dafür brauchst du nur if und mod (siehe oben) |
Re: FOR-Schleifen-Start während Durchlauf +1 zählen
Nicht unbedingt schön aber naja
Delphi-Quellcode:
var
Form1: TForm1; j:Integer; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var i:Integer; begin for i:=1 to 50 do begin inc(j,2); Memo1.Lines.Add(IntToStr(j)); end; end; procedure TForm1.FormCreate(Sender: TObject); begin j:=-1; end; |
Re: FOR-Schleifen-Start während Durchlauf +1 zählen
Zitat:
Den hab ich völlig überlesen..:oops: Passt :) Danke nochmal für den Hinweis ^^ |
Re: FOR-Schleifen-Start während Durchlauf +1 zählen
Zitat:
|
Re: FOR-Schleifen-Start während Durchlauf +1 zählen
Auch noch ein Vorschlag
Delphi-Quellcode:
For i := 1 to 50 do
begin if not odd(i) then continue; end; |
Re: FOR-Schleifen-Start während Durchlauf +1 zählen
Geht nicht auch das ???
Delphi-Quellcode:
For i := 1 to 50 do
begin if even(i) then continue; end; |
Re: FOR-Schleifen-Start während Durchlauf +1 zählen
Zitat:
|
Re: FOR-Schleifen-Start während Durchlauf +1 zählen
In einigen anderen Programmiersprachen gibt es dafür das "STEP"
Code:
FOR Iterator:=Anfangszahl TO Endezahl STEP Schrittweite DO Schleifenrumpf.
![]() In Pascal gibt es keine Schrittweite für For-Schleifen. Wozu auch. Man kann genauso gut im Schleifenrumpf eine If-Abfrage einbinden. |
Re: FOR-Schleifen-Start während Durchlauf +1 zählen
Zitat:
Delphi-Quellcode:
if not Odd(i) then continue;
|
Re: FOR-Schleifen-Start während Durchlauf +1 zählen
Ja das hat er ja vor mir so gemacht mkinzler :wink:
Ich wollt bloß mal wissen, ob es even auch gibt... (und, ja... ich weis, ich hätte auch in der Delphi-Hilfe nachgucken können) |
Re: FOR-Schleifen-Start während Durchlauf +1 zählen
Zitat:
|
Re: FOR-Schleifen-Start während Durchlauf +1 zählen
Wie wäre folgendes:
Delphi-Quellcode:
Beispiel:
type
TLoopProc = procedure(const counter: Int64); { ... } procedure ForDo(const start, stop, step: Int64; LoopProc: TLoopProc); var counter: Int64; begin counter := start; if start <= stop then while counter <= stop do begin LoopProc(counter); counter := counter + step; end else while stop <= counter do begin LoopProc(counter); counter := counter - step; end; end;
Delphi-Quellcode:
zum rückwärtszählen dann einfach start grösser stop einstellen
procedure aLoop(const counter: Int64);
begin Form1.lst1.Items.Add(IntToStr(counter)); end; procedure TForm1.btn1Click(Sender: TObject); begin lst1.Items.Clear; ForDo( StrToInt64(edt1.Text), StrToInt64(edt2.Text), StrToInt64(edt3.Text), aLoop ); end; |
Re: FOR-Schleifen-Start während Durchlauf +1 zählen
Das ist ja mal was Orginelles!!!
Sieht gut aus, deine For To Step - Schleife!!! Wär das nicht auch was für die CodeLib??? |
Re: FOR-Schleifen-Start während Durchlauf +1 zählen
Evtl. Post ichs da ja... aber vorher bau ich noch wat äquivalentes für Double-Variablen und natürlich ableger für Object-Methods
|
Re: FOR-Schleifen-Start während Durchlauf +1 zählen
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:29 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