Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi schleife (https://www.delphipraxis.net/111907-schleife.html)

matze222 11. Apr 2008 14:40


schleife
 
hi leute ich wüsste gerne wie ich ne schleife machen kann...
ich will nämlich das er etwas nachprüft und zwar immerwieder solange bis er bei 0 ist.
ich habe nämlich ein programm geschrieben in dem ich geld "einwerfe" und somit bezahle und nun krieg ich da eine ausgabe raus, die ich gern in die einzelnen münzen trennen würde...
bisher hab ich das so gemacht:
Delphi-Quellcode:
if (c>50) then
        edit5.Text:=floattostr(e+1);
        d:=(d-50);
        if (c>20) and(c<50) then
        edit6.Text:=floattostr(e+1);
        d:=(d-20);
        if (c>10) and(c<20) then
        edit7.Text:=floattostr(e+1);
        c:=(c-10);
        if (c>5) and(c<10) then
        edit8.Text:=floattostr(e+1);
        c:=(c-5);
        if (c>2) and(d<5) then
        edit9.Text:=floattostr(e+1);
        c:=(c-2);
        if (c>1) and(c<2) then
        edit10.Text:=floattostr(e+1);
        c:=(c-1);
        if (c>0.5) and(c<1) then
        edit11.Text:=floattostr(e+1);
        c:=(c-0.5);
        if (c>0.2) and(c<0.5) then
        edit12.Text:=floattostr(e+1);
        c:=(c-0.2);
        if (c>0.1) and(c<0.2) then
        edit13.Text:=floattostr(e+1);
        c:=(c-0.1);
und der scheint das irgendwie nicht richtig auszuführen...
oder hat emand nen anderen einfacheren oder besseren vorschlag?
thx im vorraus

DeddyH 11. Apr 2008 14:43

Re: schleife
 
Kopfschleife:
Delphi-Quellcode:
while Bedingung do
  //Code
Fußschleife:
Delphi-Quellcode:
repeat
  //Code
until Bedingung;

soulies 11. Apr 2008 14:47

Re: schleife
 
hoi,

vllt. gehts so eleganter :

Delphi-Quellcode:
 case c of
   50..100 : ...
   20..50  : ...
   10..20  : ...
    5..10  : ...
    2..5   : ...
        1  : ...
  end;

uwewo 11. Apr 2008 14:47

Re: schleife
 
Schau mal ind OH nach CASE, es ist übersichtlicher als soviele IF Abfragen.

zum Thema Schleife gibt es mehrere Möglichkeiten

Delphi-Quellcode:
repeat
  hier die CASE Anweisung
until c=0;
Delphi-Quellcode:
While c < 0 do
  Begin
   hier die CASE Anweisung
  end;
oder du zählst c solange hoch bis Dein Anfangswert erreicht ist.

DeddyH 11. Apr 2008 14:49

Re: schleife
 
Uwe, muss es nicht heißen
Delphi-Quellcode:
while c > 0 do
?

everdream 11. Apr 2008 15:03

Re: schleife
 
Zitat:

Zitat von matze222
Delphi-Quellcode:
[...]
if (c>10) and(c<20) then
  edit7.Text:=floattostr(e+1);
c:=(c-10);
if (c>5) and(c<10) then
  [...]

2 Fragen dazu:
1.) Meinst wirklich
Delphi-Quellcode:
if (c>10) and(c<20) then
  edit7.Text:=floattostr(e+1);
c:=(c-10);
oder eher
Delphi-Quellcode:
if (c>10) and(c<20) then
begin
  edit7.Text:=floattostr(e+1);
  c:=(c-10);
end;
?

2.) Während deiner Abrfragen wird c schon verändert. Ich bin mir nicht sicher ob das das ist, was du willst.
Soll das Programm je nachdem, wie groß c ist, etwas machen, oder soll is (wie du es im moment hast) c abfragen, dann etwas mit einem edit.Text machen, dann c (oder auch mal d) verändern und dann erst die nächste abfrage starten?

Achso, und bei deinem Code darf c z.B. nicht =10 sein (du fragst einmal auf c > 10 und einmal auf c < 10 ab, aber nie = oder <= oder >=10).

Ich denke auch, dass case c of das richtige für dich ist...

Fussball-Robby 11. Apr 2008 15:23

Re: schleife
 
@metze222: Du hast Glück, ich habe so etwas vor nem Monat auch geschrieben und habe gerade sowieso nichts zu tun, also hab ich den Code gearde mal schnell kommentiert :wink:

1.: Eine Klasse TMuenzhaufen(ich weiß, toller Name :mrgreen: ) mit den Eigenschaften Gesamt für den Gesamtwert, dem Array Muenzen für die Anzahl der einzelnen Münzen und der Prozedur zum trennen.
Delphi-Quellcode:
type
  TMuenzhaufen = class
    Gesamt : Integer;
      //Gesamtwert
    Muenzen: Array[0..5] of Integer;
      //Array mit den Münzen:
      //0: 50Cent, 1: 20Cent, 2: 10Cent, 3: 5Cent, 4: 2Cent, 5: 1Cent
    procedure Trennen;
  end;
2.: Die procdedure trennen, dürfte durch Kommentare eigentlich klar sein:
Delphi-Quellcode:
procedure TMuenzhaufen.Trennen;
var
  i, j: Integer;
const
  Muenze: Array[0..5] of Integer = (50, 20, 10, 5, 2, 1);
    //Array mit allen Münzen, von groß nach klein
begin
  j := 0;
    //Bei der größten Münze beginnen
  i := Gesamt;
  while i > 0 do
    //Schleife durchlaufen, solange noch Restgeld da ist
  begin
    while i >= Muenze[j] do
      //Solange mehr Geld da ist, als die aktuelle Münze wert ist, ..
    begin
      Inc(Muenzen[j]);
        //..die Anzahl der aktuellen Münze um 1 erhöhen und..
      Dec(i, Muenze[j]);
        //.. den Wert der aktuellen Münze vom Gesamtwert abziehen
    end;
    Inc(j);
      //Wenn der Gesamtwert kleiner als der Wert der aktuellen Münze ist
      //(Schleife wurde verlassen), zur nächstkleineren Münze gehen
  end;
end;

3.:Ein Beispielaufruf, in dem die Anzahl der einzelnen Münzen des Wertes aus Edit1 in Memo1 angezeigt werden:
Delphi-Quellcode:
var m:TMuenzHaufen;
begin
  m := TMuenzhaufen.Create;
  with m do
  begin
    try
      Gesamt := StrToInt(Edit1.text);
      Trennen;

      Memo1.Clear;
      Memo1.Lines.Add('50Cent-Münzen: '+IntToStr(Muenzen[0]));
      Memo1.Lines.Add('20Cent-Münzen: '+IntToStr(Muenzen[1]));
      Memo1.Lines.Add('10Cent-Münzen: '+IntToStr(Muenzen[2]));
      Memo1.Lines.Add('5Cent-Münzen: '+IntToStr(Muenzen[3]));
      Memo1.Lines.Add('2Cent-Münzen: '+IntToStr(Muenzen[4]));
      Memo1.Lines.Add('1Cent-Münzen: '+IntToStr(Muenzen[5]));
    finally
      FreeAndNil(m);
    end;
  end;
Mfg

PS.: Du solltest dir aber mal Grundlagen-Tutorials angucken, denn die Schleifen sind neben Bedingungen(If-Abfragen) so ziemlich das Grundlegenste beim Programmieren, was man auf jeden Fall kennen sollte.

matze222 14. Apr 2008 21:38

Re: schleife
 
hey cool thx^^

spaxxn 15. Apr 2008 06:42

Re: schleife
 
@Fussball-Robby: Wenn du "neu" bist, dann gewöhne dir mal schnell wieder das arbeiten mit "with object do" ab.

Es Kann deutlich zur Unübersichtlichkeit im Code beitragen, z.B. wenn andere sich Codeteile ansehen und interpretieren sollen und der effektive Nutzen den man davon hat ist sowieso gleich null, ausser Bequemlichkeit natürlich :)

RavenIV 15. Apr 2008 08:07

Re: schleife
 
Zitat:

Zitat von matze222
hi leute ich wüsste gerne wie ich ne schleife machen kann...

Tutorials lesen oder ein Delphi-Anfängerbuch kaufen...


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:07 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