Rückgeld
-
Halli hallo!
Ich habe eine Aufgabe zu einem Parkscheinautomat bekommen.
Er soll die Öffnungszeiten einlesen, eine zufällige Parkdauer generieren und daraus den Parkpreis ermitteln.
Jetzt bezahle ich meinen Parkpreis ab und zwar mit 10, 5, 2, 1, 0.5, 0.2, 0.1 Euro. Sobald ich zuviel einwerfe bekomme ich ein entsprechendes Rückgeld.
Dieses besteht aus 2Euro und abwärts Münzen (bis 10ct).
Nur finde ich keinen richtigen Ansatz wie ich die Schleife durcharbeiten soll, sodass ich so wenig Münzen wie möglich zurückgebe..Könnte mir vllt. wer weiterhelfen?
-
Was hast du denn bislang? Zeig mal.
EDIT: Schon mal ein Tipp: der modulo-Operator (%) dürfte hilfreich sein.
-
void Abrechnung(double Preis,int *Geldeinzahlung,int *Ruckgeld) { double Einzahlung; do { printf("Zu Zahlen: %.2f Euro\n",Preis); do { scanf("%lf",&Einzahlung); if(Einzahlung==10) Geldeinzahlung[0]++; else if(Einzahlung==5) Geldeinzahlung[1]++; else if(Einzahlung==2) Geldeinzahlung[2]++; else if(Einzahlung==1) Geldeinzahlung[3]++; else if(Einzahlung==0.5) Geldeinzahlung[4]++; else if(Einzahlung==0.2) Geldeinzahlung[5]++; else if(Einzahlung==0.1) Geldeinzahlung[6]++; } while(Einzahlung!=10&&Einzahlung!=5&&Einzahlung!=2&&Einzahlung!=1&&Einzahlung!=0.5&&Einzahlung!=0.2&&Einzahlung!=0.1); Preis-=Einzahlung; } while(Preis>=0); if(Preis==0) printf("Vielen Dank!"); else { Preis*=(-1); do { }while(Preis==0); } }
a
Das ist mein momentaner Code Für das eingezahlte Geld und das noch offene Rückgeld bei else.
Modulo habe ich mir auch schon gedacht aber es können ja auch komma beträge sein, wie zb 2.30.
-
...
-
Wie genau meinst du das?
-
Nimm 230 Cent (int) statt 2.30€ (double).
-
Ok, danke ich werds mal versuchen.
-
Ok also mein Ansatz ist..
[code="c"]
Preis=230;
Teiler=200;
do
{
Erg=Preis/Teiler;
Rest=Preis%Teiler;
Erg=Rest;
Teiler/=2;
}while(Rest!=0);Das würde denk ich mal soweit funktionieren aber Teiler/2 geht nicht ganz auf.
Weil 50/2 25 und nicht 20 ist..
Ich könnte das natürlich in If Verzweigungen rein packen, aber gibt es da vielleicht noch einen anderen Weg?
-
Mach ein Array mit deinen Werten
int geldausgabe[] = { 200, 100, 50, 20, 10, 5, 2, 1, 0}; // Die 0 zeigt das Ende an.
Dann brauchst du nur den Index weiterzählen.
Wenn du nur bis 10 Cent hast, lässt du die kleinen Beträge weg.
-
Ah perfekt danke