If- Bedingung vereinfachen...
-
Der User wirft Geld in ein Automat und die Software soll überprüfen,
ob er Rückgeld bekommt oder nicht.1. Ist meine Lösung richtig oder könnten Probleme auftreten ? (bin gerade
mit Netbook unterwegs, mein PC mit Borland muss noch repariert werden.^^)2. Kann das Programm noch weiter vereinfachen, oder ist es so ok ?
Button_GeldEinwerfen[5€] Click // Wenn Button Click { int ergebnis; ergebnis = 0; if myMoney == Preis_Snack Edit1->Text = "Rückgabe 0 €"; if myMoney > Preis_Snack ergebnis = myMoney - Preis_Snack; Edit1->Text = "Sie bekommen" + ergebnis + "zurück"; if myMoney < Preis_Snack ergebnis = Preis_Snack - myMoney; Edit1->Text = "Bitte noch" + ergebnis + "einwerfen"; myMoney = ergebnis; /* << Ich hoffe das ist richtig, denn wenn eine neue Münze eingeworfen werden soll, muss es doch wieder myMoney sein. (Außerdem habe ich für jede Münze (5€, 3€, 0,90€,...) ein Button) */ }
-
Kann mir niemand helfen ?
-
Nimm eine Funktion für das Rechnen innerhalb der Klicks:
String TForm1::Rechne(float money) { Preis_Snack -= money; return (Preis_Snack >= 0) ? ("Bitte zahlen : " + FloatToStrF(Preis_Snack, ffFixed, 4, 2)) : ("Sie erhalten : " + FloatToStrF((Preis_Snack*-1), ffFixed, 4, 2)); } // die jeweiligen Buttonklicks übergeben der Funktion den Geldwert void __fastcall TForm1::btn_5_EuroClick(TObject *Sender) { Edit1->Text = Rechne(5.00); } //--------------------------------------------------------------------------- void __fastcall TForm1::btn_1_EuroClick(TObject *Sender) { Edit1->Text = Rechne(1.00); } // usw...
-
hi,
also ich denke das die ganze Sache eher komplexer wird statt einfacher, zum Beispiel musst du bedenken das du mit einem integer nur ne Ganzzahl darstellen kannst damit kommst du in schwierigkeiten bei der Berechnung deiner Werte.
Dann würde ich auch mit ELSE arbeiten, denn in deiner Funktion werden immer egal was du auch machst alle 3 IF Abfragen abgeklappert und das ist unnötig.
Dann wäre zu überlegen ob deine Funktion einen Rückgabewert haben sollte, ich jedenfalls würde versuchen dies so zu machen.
Auch würde ich versuchen das Edit1 Feld aus der Funktion herauszunehmen und das ausserhalb der Funktion zu klären und nicht innerhalb. Hierzu brauch Deine Funktion dann aber einen RückgabeWert um die Sache zu meistern.
Ja und als erstes benutze einen anderen Datentype zum berechnen der Werte statt integer zum Beispiel float.
-
@Gestalt, meinen Beitrag hast du übersehen ?
-
Hallo
Ich habe 2 Fragen zu kpeters Lösung:
return (Preis_Snack >= 0) ? ("Bitte zahlen : " + FloatToStrF(Preis_Snack, ffFixed, 4, 2)) : ("Sie erhalten : " + FloatToStrF((Preis_Snack*-1), ffFixed, 4, 2));
Was bewirkt das Fragezeichen und was bewirkt der Doppelpunkt hier?
Wäre nett wenn mir jemand auf die Sprünge helfen könnte, da ich die Zeichen, in dem Zusammenhang, noch nie gesehen habe und sich die Suche danach schwierig gestaltet.Danke
wNw
-
@wNw
Suche nach "ternärer Operator". (Bedingung ? True : False;)@kpeter
beim Absenden meines Beitrages kam keine Info das sich im Thread was getan hätte, hab ich also erst danach gesehen.
-
Ok.
Danke, Gestalt.