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.


Anmelden zum Antworten