Wechselgeld Rechner in C?
Ich habe den folgenden Code:
#include <stdio.h>
int main(void)
{
/* declarate variables */
float price, paid, change;
int cents;
int rest;
int cent1;
int cent2;
int cent5;
int cent10;
int cent20;
int cent50;
int eur1;
int eur2;
/* print out price and paid amount */
printf("Rechnungsbetrag: ");
scanf("%f", &price);
printf("Erhaltener Betrag: ");
scanf("%f", &paid);
/* calculate the change as float */
change = paid - price;
printf("======================\n");
printf("Rückgeld: %.2f EUR\n", change);
printf("======================\n");
/* calculate the change in cents */
cents = change * 100;
eur2 = cents / 200;
rest = cents % 200;
eur1 = rest / 100;
rest = cents % 100;
cent50 = rest / 50;
rest = cents % 50;
cent20 = rest / 20;
rest = cents % 20;
cent10 = rest / 10;
rest = cents % 10;
cent5 = rest / 5;
rest = cents % 5;
cent2 = rest / 2;
rest = cents % 2;
cent1 = rest / 1;
printf("1 Cent: %d\n", cent1);
printf("2 Cent: %d\n", cent2);
printf("5 Cent: %d\n", cent5);
printf("10 Cent: %d\n", cent10);
printf("20 Cent: %d\n", cent20);
printf("50 Cent: %d\n", cent50);
printf("1 EUR: %d\n", eur1);
printf("2 EUR: %d\n", eur2);
return 0;
}
Es werden zwei Werte Eingeben, einmal den Rechnungspreis und den erhaltenen Betrag, dann wird das Wechselgeld ausgerechnet. Danach soll die Anzahl der jeweiligen Münzen errechnet werden, die es benötigt um den Betrag des Wechselgeldes zu erreichen.
Wenn ich, zum Beispiel, als Rechnungsbetrag 1.50 habe, und als Erhaltenen Betrag 2.00, dann gibt es mir 1 50 Cent münze und eine 10 cent münze aus.
Ich habe verschiedene Beträge ausprobiert und es kommt immer diese extra 10 Cent Münze raus.
Wie kann ich das beheben?
Ausgeführt unter Linux und kompiliert mit gcc 13.2.1
3 Antworten
Dein Fehler ist, dass Du für den rest immer den Modulo von cents machst, cents aber nur einmal gesetzt wird und nie ein Update erfährt.
cents ist 50
eur2 = cents / 200;
rest = cents % 200;
rest 50 = 50
cents = 50
eur1 = rest / 100;
rest = cents % 100;
rest = 50
cents = 50
cent50 = rest / 50;
rest = cents % 50;
cents50 = 1
rest = 50 % 50 = 1 also eigentlich alles gut?
cents = 50
cent20 = rest / 20;
rest = cents % 20;
cents = 50
cent20 = rest/20 = 0
rest = 50 % 20 = 10
cent10 = rest / 10;
rest = cents % 10;
cents = 50
cent10 = 10 / 10 = 1
rest = 50 % 10 = 0
Ich habe verschiedene Beträge ausprobiert und es kommt immer diese extra 10 Cent Münze raus.
Wenn du 1,50 € bezahlen musst, bekommst du 50 Cent zurück. Du gibst jedoch 60 Cent zurück - sprich eine 50 Cent und eine 10 Cent Münze.
Sorry, Kommando zurück. 😉 Ich habe deine Frage falsch verstanden resp. nicht gründlich genug gelesen (deinen Programmcode nicht berücksichtigt). Ich schließe mich soweit Destranix an. Die Berechnung ist falsch (Stichwort Modulo und Wert).
Du solltest deine lokalen Variablen initialisieren.
Ansonsten liegt dein Fehler darin, dass du überall den Modulo vom Ursprungsbetrag und nicht vom Rest nimmst.
Außerdem solltest du die Beträge am Besten als Integers einlesen und behandeln (direkt als Cent-Beträge), das ersparrt dir Ungenauigkeiten.