Autor Beitrag
itchaas
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 21



BeitragVerfasst: So 21.10.12 18:27 
Hallo,

unsere Übungsaufgabe war es in einem Array alle Euro Scheine + Münzen zu speichern.

Dann einen Betrag eingeben und von der größten beginnend solange stückeln bis das Geld
ausgegeben wurde. (Geldausgabeautomat)

Ich habe das so gelöst erhalte aber im Centbereich immer Fehlermeldung...was
mache ich da falsch? (zB. 1205 läuft korrekt ohne Fehlermeldung)

ausblenden 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:
 class T1A6_Geldbetrag
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Bitte geben Sie den zu behebenden Betrag ein: ");
            double behebung = Convert.ToDouble(Console.ReadLine());

            //500 200 100 50 20 10 5 2 1 0,5 0,2 0,1 0,05 0,02 0,01

            double[] einheiten = { 5002001005020105210.50.20.10.050.020.01 };

            int n = 0//Array Indexierung

            while (behebung > 0)
            {
                while (behebung >= einheiten[n])
                {
                    behebung = behebung - einheiten[n];
                    Console.WriteLine("Behoben wurde: " + einheiten[n]);
                }
                n++;
                
            }

          }
    }


Ausgabe bei der Zahl 1205.24 siehe Bild.

Danke.
Einloggen, um Attachments anzusehen!
jfheins
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 918
Erhaltene Danke: 158

Win 10
VS 2013, VS2015
BeitragVerfasst: So 21.10.12 19:40 
Das Problem ist, dass am Ende deiner Rechnung noch ein Minimaler Betrag zurückbleibt. Wenn man mit Gleitkommazahlen rechnet kann es passieren, dass 1200-1200 > 0 ist. Deine Behebung ist also am Ende nicht 0 sondern z.B. 0,0000000000023526 und in diesem Fall wird deine Schleife nochmal durchlaufen und das n wird zu groß.
de.wikipedia.org/wik...Cfung_auf_Gleichheit

Abhilfe: Entweder mit ganzen cent rechnen (==> Ganzzahlrechnungen) oder mit einer kleinen Toleranz:
ausblenden C#-Quelltext
1:
            while (behebung > 0.001)					

oder auf das n prüfen:
ausblenden C#-Quelltext
1:
            while (behebung > 0 && n <= 14)					


Beheben ist österreichisch für abheben :shock: wieder was gelernt...
itchaas Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 21



BeitragVerfasst: So 21.10.12 19:46 
@Behebung

Gut dann konnte ich auch was beitragen. ;-)

Danke Dir! Hast mir echt geholfen...