From bc4f807b0fe466ce7c47318a7c03f793f6b9fe0a Mon Sep 17 00:00:00 2001 From: paulusja Date: Thu, 7 May 2026 13:54:56 +0200 Subject: [PATCH] Add solutions. --- 06/divisionMitRest.c | 29 ++++++++++++++++++++++++++ 06/wechselgeld.c | 48 +++++++++++++++++++++++++++++++++++++++++--- 2 files changed, 74 insertions(+), 3 deletions(-) diff --git a/06/divisionMitRest.c b/06/divisionMitRest.c index 758406a..7fc7a35 100644 --- a/06/divisionMitRest.c +++ b/06/divisionMitRest.c @@ -17,9 +17,38 @@ ********************************************************************************************/ #include +#include "../io/myio.h" + +int inputNonZeroNumber(const char* text); +int divideWithRemainder(int number1, int number2, int* remainder); + int main() { + int number1 = getNumber("Geben Sie eine Zahl ein: "); + int number2 = inputNonZeroNumber("Geben Sie eine Zahl ein (!=0): "); + int remainder = 0; + int divisonResult = divideWithRemainder(number1, number2, &remainder); + + printf("%d / %d = %d, R: %d\n", number1, number2, divisonResult, remainder); return 0; +} + +int inputNonZeroNumber(const char* text) +{ + int result = 0; + + while(result == 0) + { + result = getNumber(text); + } + + return result; +} + +int divideWithRemainder(int n1, int n2, int* remainder) +{ + *remainder = n1 % n2; + return n1 / n2; } \ No newline at end of file diff --git a/06/wechselgeld.c b/06/wechselgeld.c index 54750c0..1520f55 100644 --- a/06/wechselgeld.c +++ b/06/wechselgeld.c @@ -37,10 +37,14 @@ #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() { @@ -53,15 +57,14 @@ int main() // 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); - /* TODO - istWechselGeldKomplett = errechneWechselgeld(// TODO: Argumente übergeben. Hier sollen u.a.die Anzahl an Münzen gesetzt werden.); - */ + 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); @@ -71,4 +74,43 @@ int main() } 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; } \ No newline at end of file