C++, Rekursion, Hilfe!!!!!!



  • In meinem Programm muss ich eine Zahl eingeben. Und das Programm gibt dann im Bildschirm heraus, wie viele Ziffern(0-9) die Zahl enthält. Und das soll geschehen mit Hilfe der Rekursion. Ähnlich wie bei der Berechnung der Quersumme. Leider habe ich absolut keine Ahnung wie man das machen kann.

    Gruss
    Tirone



  • HumeSikkins schrieb:

    Kann mir jemand helfen, bitte!!!

    Helfen wobei? Ich sehe hier keine konkrete Frage und es wird dir hier hoffentlich niemand das ganze Programm schreiben.

    Wie weit bist du? Wo genau ist dein Problem?

    Hier mal ein kleiner Denkansatz:
    1. Schau dir Division und Modulo-Division an
    2. Schau dir Schleifen an
    3. Schau dir Arrays bzw. (allgemeiner) std::map an

    Das Programm ist dann (ohne Ausgabe) ein drei-zeiler.

    hier! was willst du mehr? hier ist dein denkansatz.... ein bisschen sollte man schon selber machen....



  • #include <iostream>
    using namespace std;
    
    void ZiffernZaehlen (int Array[10], int Zahl)
    {
        if(Zahl)
        {
            ++Array[Zahl%10];
            ZiffernZaehlen(Array, Zahl/10);
        }
        else
        {
            return;
        }
    }
    
    int main(void)
    {
        int Array[10];
        for(int i = 0; i < 10; ++i)
        {
            Array[i] = 0;
        }
        int Zahl;
        cout << "Bitte die Zahl eingeben!" << endl;
        cin >> Zahl;
        ZiffernZaehlen(Array, Zahl);
        for(int i = 0; i < 10; ++i)
        {
            cout << Zahl << " enthaelt " << Array[i] << " mal die Ziffer " << i << endl;
        }
        cin.get();
        cin.get();
        return (0);
    }
    

    Ohne Gew(e/ä)hr!

    MfG

    Felix

    P.S: Ich habs für 3 Zahlen getestet. Probiers mal aus. Ist auf jeden Fall ein Ansatz.

    An die anderen: Haut mich nicht 🤡 🤡



  • HumeSikkins schrieb:

    ...es wird dir hier hoffentlich niemand das ganze Programm schreiben...

    so schnell schwindet die hoffnung (einer findet sich immer) 😃



  • hatte auch gerade langeweile

    #include <iostream>
    #include <string>
    
    void hauefigkeiten_ausgeben(int *a){for(int i=0;i<10;++i)std::cout<<i<<'\t'<<a[i]<<std::endl;}
    
    void hauefigkeiten_ermitteln(std::string s,int *a,int n){n?++a[s[--n]-'0'],hauefigkeiten_ermitteln(s,a,n):0;}
    
    int main(){
    	std::string s;
    	int a[10]={0,0,0,0,0,0,0,0,0,0};
    	std::cout<<"Zahl eingeben:";
    	std::cin>>s;
    	hauefigkeiten_ermitteln(s,a,s.size());
    	hauefigkeiten_ausgeben(a);
    }
    


  • Hey Felix
    Danke dir vielmals. Das Programm gibt mir jedoch an, dass es sich bei folgender Zeile um eine Mehrfachinitialisierung handelt:

    #include <iostream>
    using namespace std;

    void ZiffernZaehlen (int Array[10], int Zahl)
    {
    if(Zahl)
    {
    ++Array[Zahl%10];
    ZiffernZaehlen(Array, Zahl/10);
    }
    else
    {
    return;
    }
    }

    int main(void)
    {
    int Array[10];
    for(int i = 0; i < 10; ++i)
    {
    Array[i] = 0;
    }
    int Zahl;
    cout << "Bitte die Zahl eingeben!" << endl;
    cin >> Zahl;
    ZiffernZaehlen(Array, Zahl);

    ====> for(int i = 0; i < 10; ++i) <=====
    {
    cout << Zahl << " enthaelt " << Array[i] << " mal die Ziffer " << i << endl;
    }
    cin.get();
    cin.get();
    return (0);
    }

    Gruss
    Tirone



  • Und dir, der unbekannten Person, danke vielmals für deine Lösung.

    Gruss
    Tirone



  • wenigstens darauf hättest du alleine kommen können.

    nimm das int weg.



  • Tja welchen Compiler hast du denn? Wahrscheinlich Micro$oft Visual C++ 6 oder??

    Nach dem C++ Standard hört der Gültigkeitsbereich einer Variablen, die in einer Schleife definiert wird, nämlich man Ende der Schleife auf. Der Micro$oft Visual C++ 6 hält sich aber nicht da dran.

    Mit Dev-Cpp geht das ohne Fehler und ohne Warnungen durch den Compiler

    MfG

    Felix

    EDIT: Wenn du es trotzdem mit dem Compiler machen willst, mach es so wie elise gesagt hat und nimm das int weg.



  • Tirone schrieb:

    ...Das Programm gibt mir jedoch an, dass es sich bei folgender Zeile um eine Mehrfachinitialisierung handelt:...

    ZEILE ?

    also bei mir läufts



  • Hey Felix
    Danke vielmals, leider hatte ich bei dieser Aufgabenstellung absolut keine Ahnung. Leider haben wir in der Schule einen Lehrer, der keinen ist und somit die Aufgabenlösungen immer sehr schwirig sind.
    Gruss
    Tirone



  • tja, enno-tyrant, das leben und die unterschiedlichen compiler haben halt mehr zu bieten als immer nur standard 😉



  • Wunderbar es funktioniert. Ich danke euch ganz herzlich.

    Gruss
    Tirone



  • elise schrieb:

    tja, enno-tyrant, das leben und die unterschiedlichen compiler haben halt mehr zu bieten als immer nur standard 😉

    gott sei dank 👍 😃



  • Tirone schrieb:

    Leider haben wir in der Schule einen Lehrer, der keinen ist und somit die Aufgabenlösungen immer sehr schwirig sind.

    Jeder wünscht sich tolle Lehrer. Nur dummerweise kann auch der beste Lehrer der Welt nichts daran ändern, dass Lernen immer mit etwas eigenständger Arbeit verbunden ist.

    Versteh mich nicht falsch, es ist keine Schande etwas nicht zu können bzw. hilfe zu benötigen. Es nicht wenigstens mal ernsthaft zu versuchen und sich nur auf der "schlechter Lehrer"-Theorie auszuruhen hingegen schon eher.


Anmelden zum Antworten