NACHTRAG:
hab die lösung gefunden: wegen einem float rundungsfehler addiert man einfach eine sehr kleine zahl dazu, dann gehts.
Hallo,
sitze schon seit über 2 stunden am selben fehler und zweifel schon an meinem verstand...
es geht um die programmierung eines fiktiven kaffeautomaten.
wenn ich das programm starte, das produkt nr. 2 (kaffee schwarz)
auswähle, und dann mit 2 euro bezahle, dann gibt mir der automat
1x1,00, 1x0,20, 1x1,10 euro zurück. es sollen 1,40 euro zurückgeben.
er springt also beim 3. rekursiven durchlauf, der mit dem wert 0,20
aufgerufen wird, nicht in die bedingung für die 20 cent.
hier die bedingung dafür:
(arestgeld >= 0.2 && arestgeld < 0.5)
hat wer ne idee warum das nicht geht???
danke schon mal und schönen gruß,
Peter.
hab die lösung gefunden: wegen einem float rundungsfehler addiert man einfach eine sehr kleine zahl dazu, dann gehts.
Hallo,
sitze schon seit über 2 stunden am selben fehler und zweifel schon an meinem verstand...
es geht um die programmierung eines fiktiven kaffeautomaten.
wenn ich das programm starte, das produkt nr. 2 (kaffee schwarz)
auswähle, und dann mit 2 euro bezahle, dann gibt mir der automat
1x1,00, 1x0,20, 1x1,10 euro zurück. es sollen 1,40 euro zurückgeben.
er springt also beim 3. rekursiven durchlauf, der mit dem wert 0,20
aufgerufen wird, nicht in die bedingung für die 20 cent.
hier die bedingung dafür:
(arestgeld >= 0.2 && arestgeld < 0.5)
hat wer ne idee warum das nicht geht???
danke schon mal und schönen gruß,
Peter.
Code:
#include <stdio.h>
#include <stdlib.h>
//-------------------------------------------------------
float geldstueckin ()
{
printf("\n Der Automat akzeptiert folgende Geldstuecke:");
printf("\n 1: 0,05 Euro");
printf("\n 2: 0,10 Euro");
printf("\n 3: 0,20 Euro");
printf("\n 4: 0,50 Euro");
printf("\n 5: 1,00 Euro");
printf("\n 6: 2,00 Euro");
printf("\n Welches Geldstueck werfen Sie als naechstes ein?");
printf("\n Bitte Nummer (1-6) waehlen und Enter druecken: ");
float ge;
scanf("%f",&ge);
if (ge==1) return 0.05;
if (ge==2) return 0.10;
if (ge==3) return 0.20;
if (ge==4) return 0.50;
if (ge==5) return 1.00;
if (ge==6) return 2.00;
}
//-------------------------------------------------------
void geldstueckout (float arestgeld)
{
float d;
if (arestgeld >= 2)
{
d = 2.0;
printf("\n----- %f",d);
}
if (arestgeld >= 1 && arestgeld < 2)
{
d = 1.0;
printf("\n----- %f",d);
}
if (arestgeld >= 0.5 && arestgeld < 1)
{
d = 0.5;
printf("\n----- %f",d);
}
if (arestgeld >= 0.2 && arestgeld < 0.5)
{
d = 0.2;
printf("\n----- %f",d);
}
if (arestgeld >= 0.1 && arestgeld < 0.2)
{
d = 0.1;
printf("\n----- %f",d);
}
if (arestgeld >= 0.5 && arestgeld < 0.1)
{
d = 0.05;
printf("\n----- %f",d);
}
if (arestgeld <= 0)
{
printf("\n\n Weiteres Wechselgeld wird nicht ausgezahlt, ");
printf("\n da der zu zahlende Betrag bereits ausgeglichen ist");
printf("\n\n **************************************");
printf("\n PROGRAMMENDE");
}
if (arestgeld > 0)
{
printf("\n Sie erhalten eine %.2f Euro Muenze zuerueck",d);
float y = arestgeld - d;
printf("\n3---- %f",y);
geldstueckout (y);
}
}
//-------------------------------------------------------
void hauptprogramm (void)
{
printf("\n\n ********** M E N U E **********");
printf("\n * *");
printf("\n * 1: Cappucchino.... 0,80 Euro *");
printf("\n * 2: Kaffee schwarz. 0,60 Euro *");
printf("\n * 3: Zitronentee.... 0,40 Euro *");
printf("\n **********************************");
printf("\n\n Bitte waehlen: ");
int eingabe;
scanf("%d", &eingabe);
system("cls");
float geldin= 0;
float kosten;
while (geldin < kosten)
{
system("cls");
if (eingabe == 1)
{
printf("\n Es wurde Cappucchino ausgewaehlt.");
printf("\n Zu zahlender Betrag: 0,80 Euro. ");
kosten = 0.80;
}
if (eingabe == 2)
{
printf("\n Es wurde Kaffee schwarz ausgewaehlt.");
printf("\n Zu zahlender Betrag: 0,60 Euro. ");
kosten = 0.60;
}
if (eingabe == 3)
{
printf("\n Es wurde Zitronentee ausgewaehlt.");
printf("\n Zu zahlender Betrag: 0,40 Euro. ");
kosten = 0.40;
}
printf("\n Sie muessen noch mindestens %.2f Euro einwerfen",kosten-geldin);
geldin = geldin + geldstueckin ();
}
system("cls");
printf("\n Der Betrag wurde erfolgreich eingezahlt.");
printf("\n Ihr gesamtes Wechselgeld betraegt %.2f Euro.\n\n",geldin-kosten);
geldstueckout (geldin-kosten);
}
//-------------------------------------------------------
int main(int argc, char *argv[])
{
hauptprogramm ();
system("PAUSE");
return 0;
}
//-------------------------------------------------------