Hilfe bei Wechselgeld Aufgabe ?



  • Sie müssen ein Wechselgeld von w Cent herausgeben. Dazu stehen Ihnen die
    n = 6 M¨unzarten von 1, 2, 5, 10, 20 und 50 Cent zur Verfügung. Sie fragen
    sich, wie viele Möglichkeiten es gibt, den Betrag von w Cent herauszugeben,
    wenn die Reihenfolge der Münzen nicht beachtet wird. Zum Beispiel gibt es
    für die Herausgabe von 5 ct die 4 Möglichkeiten.
    Schreiben Sie eine Funktion
    int ChangeOptions(int value),

    So weit so gut hab das Programm geschrieben, sollte meiner Meinung nach auch richtig sein, aber es stürzt ab sobald ich es starten möchte

    //Aufgabe 2 Wechselgeld!
    int nennwert (int nr)
    {
    	if (nr == 1) return 1;
    	else if (nr == 2) return 2;
    	else if (nr == 3) return 5;
    	else if (nr == 4) return 10;
    	else if (nr == 5) return 20;
    	else if (nr == 6) return 50;
    	else return 0;
    }
    
    int wechselgeld (int betrag, int geldarten)
    {
    		if (betrag == 0) return 1;
    		else if (betrag < 0 || geldarten == 0) return 0;
    		else return wechselgeld(betrag, geldarten) + wechselgeld(betrag-nennwert(geldarten),geldarten);
    }
    
    int changeoptions (int betrag)
    {
    	return wechselgeld(betrag,6);
    }
    
    int main ()
    {
    	cout << potenz(3,2) << endl;
    	cout << changeoptions(500) << endl;
    }
    

    Vielleicht entdeckt ja jemand den Fehler 😕 😕
    Ich denke dass es was mit der abbruchbedingung zu tun hat aber weiß nicht genau.
    Wäre um jeden Tipp Dankbar
    euer Jack 😃


  • Mod

    potenz? Das Programm ist unvollstaendig?

    In der Wechselgeldfunktion rufst du wieder die Wechselgeldfunktion auf, mit exakt den gleichen Werten, mit denen sie selber aufgerufen wurde. Wann soll das jemals enden?



  • die ausgabe von der potenz war von einer anderen aufgabe, sorry

    Ahh danke ich habs gesehen, aber ich steh total auf dem schlauch und weiß nicht genau wie ich jetzt den wert ändern soll 😕 😕

    Tipps wären hilffreich 🙂 danke



  • Ich bin echt am verzeifeln, stehe echt ziemlich auf dem schlauch.
    Also ich weiß wenn mein Betrag 500 ist und ich dann in Funktion Betrag - Nennwert(geldart) mache, dann komm ich doch auf 450cents also hab ich doch nicht den selben betrag also sollte doch die rekursion sich nicht immer gleich aufrufen ?

    bitte brauch hilfe


  • Mod

    Jack123 schrieb:

    Ahh danke ich habs gesehen, aber ich steh total auf dem schlauch und weiß nicht genau wie ich jetzt den wert ändern soll 😕 😕

    Ich würde sagen, du musst in diesem Ausdruck die noch verbleibenden Geldarten reduzieren. Die Anzahl der Möglichkeiten, Wechselgeld zu geben, ist schließlich gleich der Anzahl der Möglichkeiten, diese mit der größten möglichen Münze zurück zu zahlen (dein wechselgeld(betrag-nennwert(geldarten),geldarten); ) plus die Anzahl der Möglichkeiten, diese mit kleineren Münzen zurück zu zahlen (also wechselgeld(betrag, geldarten - 1) ).



  • Ahhhh ich Idiot haha 🙂
    Vielen Danke war echt ein dummer fehler aber ich hab ihn nicht gesehen :S


  • Mod

    Jack123 schrieb:

    Ahhhh ich Idiot haha 🙂
    Vielen Danke war echt ein dummer fehler aber ich hab ihn nicht gesehen :S

    Ehrlich gesagt musste ich auch ziemlich lange nachdenken, bis ich diese einfache Korrektur bemerkte. Mein erster Instinkt wäre nämlich gewesen, dass der Ansatz an sich falsch ist. Aber da habe ich zu sehr in Schleifen und Anweisungen gedacht. Erst als ich dann lange nachdachte, wie ich es selber machen würde, wenn ich gänzlich rekursiv vorginge, kam ich wieder auf deinen Ansatz (plus die kleine Korrektur). Rekursion ist ganz schön hirnverdrehend, wenn man sie nicht gewohnt ist.



  • SeppJ schrieb:

    ...
    Rekursion ist ganz schön hirnverdrehend, wenn man sie nicht gewohnt ist.

    👍



  • Jack123 schrieb:

    aber es stürzt ab sobald ich es starten möchte

    James Randi wird sich freuen.

    Rekursion ist ganz leicht zu erlernen, wenn man sie erstmal verstanden hat.


Log in to reply