Hilfe bei einem kleinen Programm



  • Hiho,
    also ums kurz zu machen, habe folgende Aufgabe:

    Schreiben Sie ein C3-Programm, welches einen Bankautomaten simuliert. Das
    Programm bekommt als Eingabe einen Betrag in Euro übergeben, der vom Automaten
    ausgezahlt werden soll. Der Automat versucht diesen Betrag in moglichst
    viele unterschiedlich großen Geldscheinen zusammenzustellen. Er achtet
    weiterhin darauf, dass immer möglichst gleich viele Scheine von jedem Wert
    ausgezahlt werden. Ihr Programm soll folgende Punkte berücksichtigen:
    a) Im Automat sollen die verfügbare Anzahl von Geldscheinen der Euro-
    Banknoten (5, 10, 20, 50, 100) in globalen Variablen gespeichert werden.
    Beim Start des Programms betragt diese jeweils 10.
    b) Bevor ein Geldbetrag ausgezahlt wird, muss gepruft werden, ob der Betrag
    mit den vorhandenen Banknoten ausgezahlt werden kann. Ist dies nicht
    der Fall, so soll eine Fehlermeldung ausgegeben werden und das Programm
    wird beendet.
    c) Die Zusammenstellung der Geldscheine soll in einer Prozedur erfolgen.
    Diese soll in jeweils einzelnen Parametern die Anzahl der 5, 10, 20, 50
    und 100 Euronoten zuruckliefern, in denen der Wert ausgezahlt werden
    soll.
    d) Die Ausgabe der Geldcheine erfolgt im Hauptprogramm. Das Format kann
    dem Beispiel entnommen werden.
    e) Das Hauptprogramm soll in einer Schleife pro Schleifendurchlauf folgende
    Aktionen durchfuhren:
    - Erfragen des Geldbetrages
    - Wird ein negativer Wert eingegeben, so soll das Programm beendet
    werden
    - Wird ein positiver Wert eingegeben, so wird eine mogliche Kombination
    der Banknoten zur Auszahlung zusammengestellt, falls genügend
    Geldscheine im Automaten vorhanden sind
    - Gegebenenfalls die Kombination der Banknoten ausgegeben

    Beispiel: Auszahlung von 100 Euro
    Eingabe: 100
    Ausgabe:
    1 x 50 Euro
    1 x 20 Euro
    2 x 10 Euro
    2 x 5 Euro
    In allen anderen Varianten wurde eine Banknotengröße nicht berucksichtigt
    werden. Diese Ausgaben waren dann nicht im Sinne dieses Bankautomaten und
    wurden bei der Korrektur als falsch gewertet werden. z.B.
    Ausgabe:
    1 x 50 Euro
    2 x 20 Euro
    1 x 10 Euro

    Ich hab versucht es hinzubekommen, doch ich weiß nicht wie ich das mit der Prozedur von c) machen kann um am Ende dann eine Ausgabe zu gestalten.
    Hier mein Versuch:

    prog bank
    
    int s1=10; //s1 steht für den 100er Schein
    int s2=10;//s2 steht für den 50er Schein usw.
    int s3=10;
    int s4=10;
    int s5=10;
    
    bool check(int test)
    {
    if (test< 0)
           print("Betrag ist negativ");
           return false;
    if (test>1850 ||test%5!=0)
           print("Betrag nicht auszahlbar");
           return false;
    else return true;
    }
    {
    int geld;
    print("Wieviel Geld soll abgehoben werden?");
    read(geld);
    if(check(geld)==true)
       while (geld>=0)
        {
           if(geld-100>=0)
           geld= geld-100;
           s1=s1-1;
           if(geld-50>=0)
           geld= geld-50;
           s2=s2-1;
           if(geld-20>=0)
           geld= geld-20;
           s3=s3-1;
           if(geld-10>=0)
           geld= geld-10;
           s5=s5-1;
           if(geld-5>=0)
           geld= geld-5;
           s5=s5-1;
    
        }
    print..
    }
    


  • Aeh, warum beschraenkst du dich auf 1850, was wenn nun 20 Scheine von jeder Sorte zur Verfuegung stehen. Was ist, wenn ein zweiter Kunde kommt und Geld abhebt? Auch verstehe ich nicht, warum beim Beispiel eine Ausgabe falsch ist.

    Dein Test auf Auszahlbarkeit ist falsch. Wenn z.B. keine 5er mehr im Automaten sind, dann kann 55 Euro nicht ausgezahlt werden. Auch geheort zur Aufgabenstellung, das du ein Programm erstellst. Also Benutzereingaben auswertest und Ausgaben auf den Bildschirm taetigst. Irgendwie hast du insgesamt noch nicht allzu viel. Zu deinem konkreten Problem:

    c) Die Zusammenstellung der Geldscheine soll in einer Prozedur erfolgen.
    Diese soll in jeweils einzelnen Parametern die Anzahl der 5, 10, 20, 50
    und 100 Euronoten zuruckliefern, in denen der Wert ausgezahlt werden
    soll.

    Du kannst ja mal die Signatur (Funktions-/Prozedurkopf) der Funktion gemaess Aufgabenstellung aufschreiben.

    PS: Du haettest dir etwas mehr Muehe geben koennen, die Aufgabenstellung anstaendig zu formatieren. Oder zu mindestens die Sonderzeichen entfernen koennen.



  • Ich beschränke mich auf 1850, weil unter a) ja steht dass es nur 10 scheine von jeder sorte sind.
    Wenn 55 euro eingegeben werden, soll ich doch ja 2x20,1x10 und 1x5 euro dann nehmen und brauch keine 11 5 euro scheine?!
    Was ist wenn ein 2. kunde kommt? ja das habe ich mich auch schon gefragt, doch wird ja nicht in der aufgabenstellung explizit gesagt, dass ein 2. kommt 🙂
    Warum ein Bsp falsch ist?
    Weil wenn möglich jede art von schein genommen werden soll.
    Hatte im übrigen schon formatiert, hab aber anscheinend ein paar o,u,a vergessen und aus ihnen keine ö,ä,ü gemacht.

    "Du kannst ja mal die Signatur (Funktions-/Prozedurkopf) der Funktion gemaess Aufgabenstellung aufschreiben. "

    ich hab ja echt schon lange überlegt wie ich das umsetzen kann, bin aber echt noch ein Anfänger was das betrifft.Soll zb. die rpint anweisungen mit in die funktion?



  • Hat denn keiner mehr eine Idee? 😞



  • Ungetestet:

    int fuenf = 0, zehn = 0, zwanzig = 0, fuenfzig = 0, hundert = 0, scheine = 10, geld = 55;
    
    if(geld > (5+10+20+50+100)*scheine || geld <= 0 || geld%5) { 
    printf("Betrag nicht auszahlbar");
    return 0;
    }
    
    while(geld >= 185) {
    geld -= 100;
    ++hundert;
    }
    
    while(geld >= 85) {
    geld -= 50;
    ++fuenfzig;
    }
    
    while(geld >= 35) {
    geld -= 20;
    ++zwanzig;
    }
    
    while(geld >= 15) {
    geld -= 10;
    ++zehn;
    }
    
    while(geld >= 5) {
    geld -= 5;
    ++fuenf;
    }
    
    //print
    


  • Oder so:

    int fuenf = 0, zehn = 0, zwanzig = 0, fuenfzig = 0, hundert = 0, scheine = 10, geld;
    
    print("Wieviel Geld soll abgehoben werden?"); 
    scanf("%d", &geld);
    
    if(geld > (5+10+20+50+100)*scheine || geld <= 0 || geld%5) {
    printf("Betrag nicht auszahlbar");
    return 0;
    }
    
    while(geld >= 185) {
    geld -= 100;
    ++hundert;
    }
    
    while(geld >= 85) {
    geld -= 50;
    ++fuenfzig;
    }
    
    while(geld >= 35) {
    geld -= 20;
    ++zwanzig;
    }
    
    while(geld >= 15) {
    geld -= 10;
    ++zehn;
    }
    
    while(geld >= 5) {
    geld -= 5;
    ++fuenf;
    }
    
    //print
    

    Deweiteren sind read() und bool c++


Anmelden zum Antworten