Array Betrag mit so wenig Münzen wie möglich Zahlen



  • Hallo,

    ich habe eine Aufgabe bekommen, in der ich einen Betrag mit möglichst wenig Münzen bezahlen soll. Leider funktioniert das ganze nicht so wie ich will, da Rechenfehler auftreten(Bei der zehnten Nachkommastelle oder noch weiter hinten). Kann mir jemand weiterhelfen? Habe das Programm hier mal reingestellt:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace Geldbetrag_Euro {
      class Program {
        static void Main(string[] args) {
          double betrag;
          bool ok = false;
          do {
            Console.WriteLine("Bitte geben Sie einen Betrag in Euro ein, den Sie mit so wenig Münzen wie möglich zahlen wollen");
            ok = Double.TryParse(Console.ReadLine(), out betrag);
          } while (!ok);
          Euro(betrag);
          Console.WriteLine(" ");
        }
        static void Euro(double abetrag) {
          double[,] münzen = new double[2, 8] { { 0.01, 0.02, 0.05, 0.10, 0.20, 0.50, 1.0, 2.0 }, { 0, 0, 0, 0, 0, 0, 0, 0 } };
          while (abetrag != 0) {
            int i = 7;
            while (münzen[0, i] > abetrag) {
              i--;
            }
            abetrag = abetrag - münzen[0, i];
            münzen[1, i]++;}
    
            int idx = 7;
            do {
              if (münzen[1, idx] > 0) {
                Console.WriteLine(münzen[1, idx].ToString() + " mal " + münzen[0, idx].ToString() + "Euro");
              }
            } while (idx >= 0);
    
          }
        }
      }
    


  • Mach alles mal 100 und arbeite mit natürlichen Zahlen.



  • Wo entsteht denn der Fehler? Bei der Anzahl der Münzen oder beim Betrag?
    Ich würde einfach mal mit einem Debugger durchlaufen und beobachten wie sich die Zahlen verändern.

    Gruß
    Nathon


Anmelden zum Antworten