/************************************************************************************************************************** * Schreiben Sie die fehlenden Funktionen für das untenstehende Programm und ergänzen Sie die mit TODO markierten * * Funktionsaufrufe. Der Rest des Programms darf nicht verändert werden. * * * * Das Programm simuliert einen Ticketautomaten, der einen Preis anzeigt und der mittels Eingabe bezahlt werden soll. Der * * Automat gibt dann mittels Ausgabe das Restgeld in 2-Euro-Münzen, 50-Cent-Münzen und 10-Cent-Münzen zurück. Dabei * * sollen immer möglichst viele der Münzen mit höheren Wert zurückgegeben werden. Wenn der Restbetrag nicht komplett * * durch diese Münzen ausbezahlt werden kann, wird die Differenz einbehalten. Der zu bezahlende Preis wird als Simulation * * zufällig im Intervall [MIN_PREIS_IN_EUROS; MAX_PREIS_IN_EUROS] ermittelt. * * * * 1. Möglicher Ablauf: * * * * Ticketautomat: Achtung! Restbetraege kleiner 10 Cents koennen nicht ausbezahlt werden! * * * * >> Bezahlen Sie bitte 6.31 Euro: 5 * * >> Bezahlen Sie bitte 6.31 Euro: ghgf * * >> Bezahlen Sie bitte 6.31 Euro: 10.5199999999 * * Sie haben 10.51 Euro bezahlt. Der Restbetrag von 4.20 wird nun ausgezahlt. * * * * Ihr Wechselgeld: 2x 2-Euro-Muenzen, 0x 50-Cent-Muenzen, 2x 10-Cent-Muenzen. * * * * 2. Möglicher Ablauf: * * * * Ticketautomat: Achtung! Restbetraege kleiner 10 Cents koennen nicht ausbezahlt werden! * * * * >> Bezahlen Sie bitte 9.28 Euro: 9 * * >> Bezahlen Sie bitte 9.28 Euro: 10 * * Sie haben 10.00 Euro bezahlt. Der Restbetrag von 0.72 wird nun ausgezahlt. * * * * Ihr Wechselgeld: 0x 2-Euro-Muenzen, 1x 50-Cent-Muenzen, 2x 10-Cent-Muenzen. * * * * Der Betrag konnte nicht komplett ausgezahlt werden. * * * **************************************************************************************************************************/ #include #include #include #include "../io/myio.h" #define MIN_PREIS_IN_EUROS 5.15 #define MAX_PREIS_IN_EUROS 12.95 double ermittlePreis(); double wirfGeldEin(double preisInEuro); int errechneWechselgeld(double restBetrag, int *anzahlZweiEuro, int *anzahlFuenzigCent, int *anzahlZehnCent); int main() { int zweiEuroMuenzen, fuenzigCentMuenzen, zehnCentMuenzen, istWechselGeldKomplett; double preisInEuro, bezahlterBetragInEuro, restBetragInEuro; printf("\nTicketautomat: Achtung! Restbetraege kleiner 10 Cents koennen nicht ausbezahlt werden!\n\n"); srand(time(NULL)); // TODO: Der Preis soll in dieser Simulation zufällig ermittelt werden. Die Preisspanne ist oben als Konstanten hinterlegt. preisInEuro = ermittlePreis(); // TODO: Das einzuwerfende Geld muss einer validen Eingabe entsprechen. Dafür muss u.a. mindestens der Preis bezahlt werden. bezahlterBetragInEuro = wirfGeldEin(preisInEuro); restBetragInEuro = bezahlterBetragInEuro - preisInEuro; printf("Sie haben %.2lf Euro bezahlt. Der Restbetrag von %.2lf wird nun ausgezahlt.\n", bezahlterBetragInEuro, restBetragInEuro); istWechselGeldKomplett = errechneWechselgeld(restBetragInEuro, &zweiEuroMuenzen, &fuenzigCentMuenzen, &zehnCentMuenzen);// TODO: Argumente übergeben. Hier sollen u.a.die Anzahl an Münzen gesetzt werden.); printf("\nIhr Wechselgeld: %2dx 2-Euro-Muenzen, %2dx 50-Cent-Muenzen, %2dx 10-Cent-Muenzen.\n", zweiEuroMuenzen, fuenzigCentMuenzen, zehnCentMuenzen); if(!istWechselGeldKomplett) { printf("\nDer Betrag konnte nicht komplett ausgezahlt werden.\n"); } return 0; } double ermittlePreis() { int minCents = 100 * MIN_PREIS_IN_EUROS; int maxCents = 100 * MAX_PREIS_IN_EUROS; int zufallsPreisInCent = rand() % (maxCents - minCents + 1) + minCents; return zufallsPreisInCent / 100.0; } double wirfGeldEin(double preisInEuro) { double eingabe = 0; printf("Bitte bezahlen Sie %.2lf Euro.\n", preisInEuro); while(eingabe < preisInEuro) { eingabe = getDoubleNumber("Bitte Geld einwerfen: "); } return eingabe; } int errechneWechselgeld(double restBetrag, int *anzahlZweiEuro, int *anzahlFuenzigCent, int *anzahlZehnCent) { unsigned int restBetragCent = restBetrag * 100; *anzahlZweiEuro = restBetragCent / 200; restBetragCent %= 200; *anzahlFuenzigCent = restBetragCent / 50; restBetragCent %= 50; *anzahlZehnCent = restBetragCent / 10; restBetragCent %= 10; return restBetragCent == 0; }