Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Lazarus (IDE) (https://www.delphipraxis.net/81-lazarus-ide/)
-   -   Schleifen-Problem (https://www.delphipraxis.net/177363-schleifen-problem.html)

Fritt 2. Nov 2013 22:36

Schleifen-Problem
 
Entschuldigt bitte, wenn ähnliche Posts bereits tausendfach irgendwo gepostet wurden, allerdings konnte ich nirgendwo eine Lösung für mein Problem finden. Ich bin, was Lazarus/Delphi angeht, ein ziemlicher Neuling. In meinem Info-Kurs hatten wir die Aufgabe eine in einem Edit-Feld stehende Zahl mit einer weiteren in einem zweiten Edit-Feld stehenden Zahl zu potenzieren. Dabei sollten wir einmal eine for-, eine while- und eine repeat-until-Schleife verwenden. Das mit der For-Schleife hat soweit auch zufriedenstellend funktioniert. Ich weiß aber nicht wirklich, wie die anderen beiden funktionieren sollen (Ich habe wirklich verdammt lange überlegt und komme alleine nicht so wirklich weiter).
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
Var a:double; c: double; i: integer;
begin
  a:=strtofloat(edit1.text);
c:=1;
for i:=1 to strtoint(edit2.text)do
begin
c:=c*a;
end;
edit3.text:=floattostr (c);
end;
Vielen Dank schon mal für eure Hilfe! :)

EineFrage 3. Nov 2013 02:00

AW: Schleifen-Problem
 
Wenn ich das richtig verstanden habe, ungefähr so (sicher nicht perfekt, aber funktioniert und für einen Info-Kurs völlig ausreichend):

Delphi-Quellcode:
// for
procedure TForm1.Button1Click(Sender: TObject);
var
 a, c: Double;
 i: Integer;
begin
 a := StrToFloat(Edit1.Text);
 c := 1;

 for i := 1 to StrToInt(Edit2.Text) do
  begin
   c := c * a;
  end;

 Edit3.Text := FloatToStr(c);
end;

// while
procedure TForm1.Button2Click(Sender: TObject);
var
 a, c: Double;
 i: Integer;
begin
 a := StrToFloat(Edit1.Text);
 c := 1;

 i := 0;
 while i < StrToInt(Edit2.Text) do
  begin
   inc(i);
   c := c * a;
  end;

 Edit3.Text := FloatToStr(c);
end;

// repeat
procedure TForm1.Button3Click(Sender: TObject);
var
 a, c: Double;
 i: Integer;
begin
 a := StrToFloat(Edit1.Text);
 c := 1;

 i := 0;
 repeat
  inc(i);
  c := c * a;
 until i = StrToInt(Edit2.Text);

 Edit3.Text := FloatToStr(c);
end;

himitsu 3. Nov 2013 03:15

AW: Schleifen-Problem
 
Ich wollte eigentlich erstmal das Grundproblem angehen.

Eine For-Schleife ist ja im Grunde eine While-Schleife (oder Repeat mit vorherrigem IF).

Du mußt dir einfach nur mal überlegen was eine For-Schleife eigentlich macht.
- es initialisiert die Schleifen-Variable mit dem Startwert
- prüft die Abbruchbedingung (vergleichen mit Endwert)
- und erhöht nach jedem Durchgang den Wert der Variable

Und schon hast du den Codes für das While zusammen.

Beim Repeat wird der Wert am ende der Schleife geprüft und während beim While darauf beprüft wird, ob in die Schleife reingesprungen wird, wird beim Repeat auf den Abbruch der Schleife geprüft.

Dementsprechend muß man die Prüfung umbauen und auch darauf achten, daß dort auf den Endwert erst nachträglich geprüft wird.
@EineFrage: Beachte mal, bei deinem Code, daß man in Edit2 auch eine 0 oder sogar eine negative Zahl eingeben könnte ... also nicht wundern, wenn die Repeat-Variante dort ein anderes Ergebnis liefert.

sx2008 3. Nov 2013 07:27

AW: Schleifen-Problem
 
Die Videos sind auf Englisch; es schadet ja nicht beim Lernen von Pascal gleichzeitig seine Englischkenntnisse zu verbessern. 8-)
while .. do http://www.youtube.com/watch?v=A2ummLkXUGg
repeat ... until http://www.youtube.com/watch?v=lRRRqb6Yg_w
for ... do http://www.youtube.com/watch?v=ofUy_ddjyhA


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:34 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz