Hallo,
okay ich Funktion an sich klappt soweit
Sie ist zwar etwas unschön entwickelt aber funktioniert.
Hier der Code
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
|
void rueckgabe(float fRueckgabe)
{
int iRueckgabe = fRueckgabe * 100;
int iMuenzen[5] = { 0, 0, 0, 0, 0 };
while(iRueckgabe > 0)
{
printf("%i \n", iRueckgabe);
if(iRueckgabe >= 200)
{
while(iRueckgabe > 0 && iRueckgabe % 200 == 0)
{
iRueckgabe -= 200;
iMuenzen[0] += 1;
}
}
if(iRueckgabe >= 100)
{
while(iRueckgabe > 0 && iRueckgabe % 100 == 0)
{
iRueckgabe -= 100;
iMuenzen[1] += 1;
}
}
if(iRueckgabe >= 50)
{
while(iRueckgabe > 0 && iRueckgabe % 50 == 0)
{
iRueckgabe -= 50;
iMuenzen[2] += 1;
}
}
if(iRueckgabe >= 20)
{
while(iRueckgabe > 0 && iRueckgabe % 20 == 0)
{
iRueckgabe -= 20;
iMuenzen[3] += 1;
}
}
if(iRueckgabe >= 10)
{
while(iRueckgabe > 0 && iRueckgabe % 10 == 0)
{
iRueckgabe -= 10;
iMuenzen[4] += 1;
}
}
if(iRueckgabe < 10)
{
iRueckgabe = 0;
}
getch();
}
printf("Rueckgabe: %i x 2.00 Euro \n", iMuenzen[0]);
printf(" %i x 1.00 Euro \n", iMuenzen[1]);
printf(" %i x 0.50 Euro \n", iMuenzen[2]);
printf(" %i x 0.20 Euro \n", iMuenzen[3]);
printf(" %i x 0.10 Euro \n", iMuenzen[4]);
return;
}
|
Ich habs mal mit den Werten 0.40 und 4 getestet.
Er gibt wie geplant die korrekten Beträge aus.
Nur muss bei der Übergabe schon irgendwie ein Fehler entstehen.
Hier mal der Fehlercode
|
C-/C++-Quelltext
|
1
2
3
4
5
|
if(preis < 0)
{
printf("Rueckgabe: %3.2f \n", rueck); //Hier ist es noch GENAU
rueckgabe(rueck); // Nachdem ersten aufruf und der Ausgabe in der while schleife ist der Wert von rueck um 0.01 dekramentiert
}
|
Ich weiß nicht wie der einfach die Zahl wegradiert.
EDIT
Okay ich weiß jetzt wo der Fehler liegt!
Er liegt genau hier:
|
C-/C++-Quelltext
|
1
|
int iRueckgabe = fRueckgabe * 100;
|
Vor de Umrechnung hat fRueckgabe noch den Übergeben Wert.
Aber bei der Multiplikation mit 100 verliert er leider den Wert 0.01
Leider weiß ich nicht warum und auch nicht wie ich dies lösen kann.
MFG T-Virus