Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi FOR-Schleifen-Start während Durchlauf +1 zählen (https://www.delphipraxis.net/90559-schleifen-start-waehrend-durchlauf-1-zaehlen.html)

Svenkan 19. Apr 2007 13:30


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

Tyrael Y. 19. Apr 2007 13:31

Re: FOR-Schleifen-Start während Durchlauf +1 zählen
 
Mach es mit einer WHILE Schleife

TonyR 19. Apr 2007 13:32

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!

Svenkan 19. Apr 2007 13:37

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?

sakura 19. Apr 2007 13:38

Re: FOR-Schleifen-Start während Durchlauf +1 zählen
 
Zitat:

Zitat von Svenkan
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?

Ein bisschen Assembler, Pointer-Arithmetik, etc. Dinge die in der Schule nie dran genommen werden und wenn Du die erklären müsstest... Nein, in Pascal/Delphi erlaubt es die Sprache nicht die Schleifenvariabel zu ändern. Das kann der Lehrer dann auch nicht verlangen, da musst Du auf WHILE ausweichen.

...:cat:...

Tormentor32 19. Apr 2007 13:39

Re: FOR-Schleifen-Start während Durchlauf +1 zählen
 
Dann mach doch einfach:
Delphi-Quellcode:
If Zaehler mod 2 <> 0
Edit: Tag korriegiert

mkinzler 19. Apr 2007 13:40

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;

Svenkan 19. Apr 2007 13:47

Re: FOR-Schleifen-Start während Durchlauf +1 zählen
 
Delphi-Quellcode:
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;
Wie setze ich das nun wieder ein?
Weil, wenn ich zaehler=zaehler2 wähle, bekomm ich wieder den gleichen Fehler wie zum Anfang.
Das hatte ich ja auch schonmal ausprobiert...

mkinzler 19. Apr 2007 13:49

Re: FOR-Schleifen-Start während Durchlauf +1 zählen
 
Man sollte den Zähler der Schleife nicht manuell verändern.

Svenkan 19. Apr 2007 13:50

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.

TonyR 19. Apr 2007 13:52

Re: FOR-Schleifen-Start während Durchlauf +1 zählen
 
Zitat:

Zitat von Svenkan
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.

Lösung in Beitrag #6 ???

Torpedo 19. Apr 2007 13:53

Re: FOR-Schleifen-Start während Durchlauf +1 zählen
 
Zitat:

Zitat von Svenkan
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.

Das was du da geschrieben hast kann man ja fast 1:1 in Delphi-Code umsetzen:
Addiere nur die ungeraden Zahlen.
Dafür brauchst du nur if und mod (siehe oben)

Blackheart 19. Apr 2007 13:54

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;

Svenkan 19. Apr 2007 13:58

Re: FOR-Schleifen-Start während Durchlauf +1 zählen
 
Zitat:

Zitat von TonyR
Zitat:

Zitat von Svenkan
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.

Lösung in Beitrag #6 ???

Autsch >.<
Den hab ich völlig überlesen..:oops:
Passt :)
Danke nochmal für den Hinweis ^^

SirThornberry 19. Apr 2007 14:05

Re: FOR-Schleifen-Start während Durchlauf +1 zählen
 
Zitat:

Zitat von Blackheart
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;

ganz und gar nicht schön! warum ist j global anstelle local?

uwewo 19. Apr 2007 14:29

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;

TonyR 19. Apr 2007 14:33

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;

uwewo 19. Apr 2007 14:41

Re: FOR-Schleifen-Start während Durchlauf +1 zählen
 
Zitat:

Zitat von TonyR
Geht nicht auch das ???
Delphi-Quellcode:
For i := 1 to 50 do
  begin
    if even(i) then continue;
  end;

Nein even gibt es nicht

HannosG 19. Apr 2007 16:22

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.
For-Schleife - Wikipedia
In Pascal gibt es keine Schrittweite für For-Schleifen.
Wozu auch. Man kann genauso gut im Schleifenrumpf eine If-Abfrage einbinden.

mkinzler 19. Apr 2007 16:25

Re: FOR-Schleifen-Start während Durchlauf +1 zählen
 
Zitat:

Nein even gibt es nicht
Aber Odd():
Delphi-Quellcode:
if not Odd(i) then continue;

TonyR 19. Apr 2007 16:30

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)

Torpedo 19. Apr 2007 17:07

Re: FOR-Schleifen-Start während Durchlauf +1 zählen
 
Zitat:

Zitat von HannosG
Wozu auch. Man kann genauso gut im Schleifenrumpf eine If-Abfrage einbinden.

Damit man sich Code ersparen kann? (auch wenns nur eine Zeile ist) Wenn man sowas öfters machen will, wäre eine Schleife, bei der man die Schrittweite einstellen kann sicher, ganz nützlich.

cruiser 19. Apr 2007 17:22

Re: FOR-Schleifen-Start während Durchlauf +1 zählen
 
Wie wäre folgendes:

Delphi-Quellcode:
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;
Beispiel:
Delphi-Quellcode:
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;
zum rückwärtszählen dann einfach start grösser stop einstellen

TonyR 19. Apr 2007 17:27

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???

cruiser 19. Apr 2007 17:35

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

TonyR 19. Apr 2007 18:26

Re: FOR-Schleifen-Start während Durchlauf +1 zählen
 
Zitat:

Zitat von cruiser
Evtl. Post ichs da ja... aber vorher bau ich noch wat äquivalentes für Double-Variablen und natürlich ableger für Object-Methods

Mach das! Wäre IMHO eine Bereicherung!!!


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