Geldbeträge Rueckzahlung



  • Programmiersprache C

    Die Aufgabe Lautet:

    In dieser Aufgabe sollen Sie einen Kassenautomaten simulieren, der einen zuf älligen Betrag zwischen 1 und 50 € kassiert. Dieser Automat akzeptiert alle Scheine und Münzen zwischen 1 Cent und 50 € und zeigt nach jeder Einzahlung den noch zu zahlenden Betrag an. Möglicherweise zu viel gezahlte Beträge werden in möglichst großen Scheinen und Münzen
    zurückgezahlt, wobei ein Schein oder eine Münze auch mehrfach ausgezahlt werden kan n. Sie dürfen zur Vereinfachung davon ausgehen, dass der Automat immer genügend Wechselgeld zur Verfügung hat.

    ...So bis auf die Rueckzahlug mit Münzen habe ich alles geschafft. Könnt ihr mir eine Ansatz geben? Ich bedanke mich im voraus.

    Am Ende soll es so aussehen:

    Sie erhalten zurueck: 2.26 Euro = 1 * 2.00 Euro + 1 * 20 Cent + 1 *
    5 Cent + 1 * 1 Cent


  • Mod

    dcbaer schrieb:

    Programmiersprache C#

    Dafür gibt es ein eigenes Forum. C und C# haben (bis auf den Namen) ungefähr so viel miteinander zu tun wie C mit Java oder C# mit Pascal.

    ...So bis auf die Rueckzahlug mit Münzen habe ich alles geschafft. Könnt ihr mir eine Ansatz geben? Ich bedanke mich im voraus.

    Was ist dein Problem? Hast du eine Frage zur Sprache C# oder weißt du nicht, wie ein Algorithmus aussehen könnte?

    Für letzteres: Meistens formuliert man das Problem so, dass man möglichst wenige Münzen zurück geben soll. Allgemein wäre dieses Problem äußerst schwierig zu lösen. Hier jedoch hast du Glück:
    1. Die Aufgabe ist schließlich, möglichst große Münzen zurück zu geben, nicht möglichst wenige
    2. Die Werte unseres Münzsystems sind (absichtlich?) so gewählt, dass die beiden Probleme identisch sind: Wenn du immer die möglichst größte Münze wählst die noch passt, bis der Betrag ausgeglichen ist, so ist dies auch automatisch die geringst mögliche Anzahl von Münzen.



  • Tut mir Leid, ich meinte natürlich C 🙂

    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    
    int main(void)
    {
    
    float zahlung,   cent1, rueckgabe;
    srand( time(0) );
    float preis=  1+rand()%5000;
    float euro;
    int geld=rueckgabe, geld20, geld10,  geld5, gelda,geldb,geldc;
    
    euro=preis/100;
    geld=rueckgabe*100;
    
    printf(" Ihr Weihnachtsgeschenk kostet: %.2f Euro  \n " ,euro);
    printf("\n");
    printf(" Sie haben noch %.2f Euro zu zahlen. Ihre Zahlung? \n ", euro);
    scanf("%f", &zahlung);
    
    while(zahlung<1 || zahlung>50)
    
    {
    scanf("%f", &zahlung); }
    
        printf("\nDanke!\n");
    
    void rueckgabe1 ()
    
    {
    rueckgabe = zahlung -  euro;
    
    printf("\n Sie erhalten zurueck:  %.2f Euro \n", rueckgabe);
    
    printf("\n");
    
    while( geld >= 20) {
    
    geld20 = geld / 20;
    printf("  20 Euro Scheine: %.2d " + geld20);
    gelda= geld-geld20;
    printf("\n");
    }
    
      while (geld >= 10) {
    
    geld10 = gelda / 10;
    printf("  10 Euro Scheine: %.2d " + geld10);
    geldb=gelda-geld10;
    printf("\n");
    
    }
    
    while (geld >= 5) {
    
    geld5 = geldb / 5;
    printf(" 5 Euro Scheine: %.2d " + geld5);
    printf("\n");
    
    }
    
    }
    
    rueckgabe1();
    
    printf("\nWir danken fuer Ihr Vertrauen\n"
    "Beehren Sie uns bald wieder \n");
    
    }
    

    Ich habe bis jetzt das hier, aber die Rueckgabe funktioniert natürlich noch nicht ganz genau. Ich weiß nicht wie der Algorithmus aussehen könnte.


  • Mod

    dcbaer schrieb:

    Ich habe bis jetzt das hier, aber die Rueckgabe funktioniert natürlich noch nicht ganz genau. Ich weiß nicht wie der Algorithmus aussehen könnte.

    Habe ich dir doch beschrieben. Wo genau ist das Problem?

    Eine Fließkommazahl ist übrigens ein denkbar ungeeigneter Datentyp für Geldbeträge. Nimm als Krücke wenigstens so etwas wie int (und dann in Cent oder Centbruchteilen rechnen), das vermeidet die gröbsten Rechenfehler.

    Wenn sich Code mehrmals identisch oder fast identisch wiederholt, ist dies ein starkes Zeichen dafür, dass man das Programm vereinfachen könnte.

    Wenn man viele Variablen mit gleichem Namensbeginn und jeweils einem kurzen Suffix hat, ist dies ein Zeichen, dass man diese Variablen in einer gemeinsamen Datenstruktur unterbringen möchte (oftmals ein Array).

    Wenn diese viele Variablen jedoch nur deshalb ein Suffix haben, weil man X-Mal den gleichen Code wiederholt (siehe oben) und sonst Namenskollisionen hätte, dann ist dies jedoch ein Zeichen dafür, dass man diese Variablen gar nicht bräuchte. Oft ist dann der Gültigkeitsbereich zu groß gewählt.

    Wenn man zwei Ganzzahlen dividiert, ist das Ergebnis eine Ganzzahl.


Anmelden zum Antworten