Bei hohem Wert Programmhänger



  • Nabend,

    mit dem unten zu sehenden Programm sollen Palindrome gefunden werden. Zuerst wird abgefragt, wie viele Buchstaben es besitzen soll und dann wie viele "zufällig" erzeugt werden sollen, um darauf zu zeigen, wie viele von den gebildeten Wörtern wirklich Palindrome sind.

    Wenn ich die Applikation starte und darauf einen Wert über 201 an Buchstaben angebe und danach irgendeinen gültigen Wert für die Anzahl der Berechnungen eintippe, macht das Programm nicht weiter.

    Woran liegt es?

    #include <iostream>
    #include <conio.h>
    #include <cstdlib>
    #include <ctime>
    #include <iomanip>
    
    using namespace std;
    
    int main()
    {
        srand(time(NULL));
        const unsigned MAX=40000;
        char text[MAX], rep='j';
        bool checker=false;
        int anzahl;
        unsigned palmenge, existent=0;
    
    while (rep=='j' || rep=='J')
    {
        system("CLS");
    
        cout<<endl<<endl<<"Anzahl der Buchstaben (2-"<<MAX<<"): ";
        cin>>anzahl;
    
        while (anzahl>MAX || anzahl<=1)
        {
            cout<<"Invalide Eingabe. Geben Sie eine Zahl zwischen 2 und "<<MAX<<" ein: ";
            cin>>anzahl;
        }
    
        cout<<"Wie oft soll ein Wort erzeugt werden, um eine Palindromexistenz zu ueberpruefen (max. 4294967295)? ";
        cin>>palmenge;
    
        for (int j=0; j<palmenge; j++)
        {
            checker=false;
    
            for (int i=0; i<anzahl; i++)
            {
                text[i]=(rand()%25)+97;
            }
    
            for (int i=0; i<anzahl/2; i++)
            {
                if (text[i]!=text[(anzahl-1)-i])
                {
                     i=100;
                     checker=true;
                }
            }
    
            if (checker==false)
                existent++;
    
            system("CLS");
            cout<<endl<<"Zahlen werden berechnet...\t"<<fixed<<setprecision(2)<<(double)j/palmenge*100<<"/100%";
    
        }
    
        system("CLS");
        cout<<"Statistik:";
        cout<<endl<<"Von "<<palmenge<<" Woertern sind "<<existent<< " Palindrome und "<<palmenge-existent<<" keine.";
    
        cout<<endl<<endl<<"Programm neustarten? (J/N)";
        cin>>rep;
    
    }
    
    }
    


  • Nur mal so ins Blaue gefragt, was hälst du von der Benutzung eines Debuggers ?



  • Ich programmiere noch nicht sehr lange und habe noch nie etwas debuggt. Kannst du da einen empfehlen?



  • Hab den Fehler gefunden dank "COUT" Debuggens. 🙂

    Der Fehler ist der i Wert gewesen, um die Schleife zu beenden.
    Folgend muss i größer sein als "anzahl/2", was in alle Fällen, bei denen anzahl größer als 201 war, nicht richtig war, da i=100 war.

    Außerdem muss "existent" noch in der while-Schleife genullt werden.



  • Phisherman schrieb:

    Ich programmiere noch nicht sehr lange und habe noch nie etwas debuggt. Kannst du da einen empfehlen?

    Dem vom Visual Studio


Anmelden zum Antworten