AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Schleifen-Problem

Ein Thema von Fritt · begonnen am 2. Nov 2013 · letzter Beitrag vom 3. Nov 2013
Antwort Antwort
Fritt

Registriert seit: 1. Jul 2013
Ort: Siegen
1 Beiträge
 
FreePascal / Lazarus
 
#1

Schleifen-Problem

  Alt 2. Nov 2013, 22:36
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!
Felix
  Mit Zitat antworten Zitat
EineFrage

Registriert seit: 3. Nov 2013
7 Beiträge
 
#2

AW: Schleifen-Problem

  Alt 3. Nov 2013, 02:00
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;

Geändert von EineFrage ( 3. Nov 2013 um 02:02 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.115 Beiträge
 
Delphi 12 Athens
 
#3

AW: Schleifen-Problem

  Alt 3. Nov 2013, 03:15
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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 15. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#4

AW: Schleifen-Problem

  Alt 3. Nov 2013, 07:27
Die Videos sind auf Englisch; es schadet ja nicht beim Lernen von Pascal gleichzeitig seine Englischkenntnisse zu verbessern.
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
fork me on Github
  Mit Zitat antworten Zitat
Antwort Antwort

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:13 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