![]() |
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:
und der scheint das irgendwie nicht richtig auszuführen...
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); oder hat emand nen anderen einfacheren oder besseren vorschlag? thx im vorraus |
Re: schleife
Kopfschleife:
Delphi-Quellcode:
Fußschleife:
while Bedingung do
//Code
Delphi-Quellcode:
repeat
//Code until Bedingung; |
Re: schleife
hoi,
vllt. gehts so eleganter :
Delphi-Quellcode:
case c of
50..100 : ... 20..50 : ... 10..20 : ... 5..10 : ... 2..5 : ... 1 : ... end; |
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:
oder du zählst c solange hoch bis Dein Anfangswert erreicht ist.
While c < 0 do
Begin hier die CASE Anweisung end; |
Re: schleife
Uwe, muss es nicht heißen
Delphi-Quellcode:
?
while c > 0 do
|
Re: schleife
Zitat:
1.) Meinst wirklich
Delphi-Quellcode:
oder eher
if (c>10) and(c<20) then
edit7.Text:=floattostr(e+1); c:=(c-10);
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... |
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:
2.: Die procdedure trennen, dürfte durch Kommentare eigentlich klar sein:
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;
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:
Mfg
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; 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. |
Re: schleife
hey cool thx^^
|
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 :) |
Re: schleife
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:56 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