Maximale Operationszahl einer For-Schleife erhöhen.



  • Ah ok dann werd ich wohl mehr lernen müssen. Vielen Dank für die schnelle Hilfe!



  • std::array hilft nicht beim Größenproblem des Stacks.

    Nimm std::vector , wenn du die Größe ändern können willst oder wenn du nicht groß nachdenken willst oder ...

    Wenn die Größe fest auf den Wert N gesetzt weden soll, kannst auch alternativ auto array_im_freispeicher = std::make_unique<T[]>(N); nutzen.


  • Mod

    Ich frage mich, wieso du überhaupt meinst, die Kombinationen speichern zu müssen. Verarbeite sie doch sofort!



  • wob schrieb:

    std::array hilft nicht beim Größenproblem des Stacks.

    Hussa ... ich habs noch nie genutzt und eine falsche Spekulation rausgehauen ... Asche auf mein Haupt 🙄



  • Also mit dem Vektor klappt es an sich wunderbar, nur stürzt er jetzt bei der 250.000 von 4 Millionen Kombinationen ab. Liegt das daran, dass dann auch die Heap voll ist?

    (Ich will die auch gar nicht speichern, aber weiß halt grad nicht wie ich die nach erstellen wieder lösche :P)


  • Mod

    GustavSchnabel schrieb:

    Also mit dem Vektor klappt es an sich wunderbar, nur stürzt er jetzt bei der 250.000 von 4 Millionen Kombinationen ab. Liegt das daran, dass dann auch die Heap voll ist?

    Unwahrscheinlich. Viel wahrscheinlicher machst du einen Fehler.

    (Ich will die auch gar nicht speichern, aber weiß halt grad nicht wie ich die nach erstellen wieder lösche :P)

    Häh? Indem du sie einfach gar nicht speicherst! Das gibt es nichts zu löschen.

    Das klingt alles sehr verdächtig, als würdest du irgendetwas Grundlegendes ganz furchtbar falsch machen. Zeig mal Code!



  • #include <fstream>
    #include <iostream>
    #include <strings.h>
    #include <vector>
    using namespace std;
    int main(void) {
        string Woerterliste[207800];
        vector<string> WortVec;
        vector<string> Kombi;
        ifstream file("Wortliste.txt");
        if (file.is_open()) {
            for (int v = 0; v < 207500; ++v) {
                file >> Woerterliste[v];
                WortVec.push_back(Woerterliste[v]);
                Kombi.push_back("");
            }
        };
        int x;
        char a;
        char b;
        int q = 0;
        int w = 0;
        int e = 0;
        char Auswahl_a[10] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'};
        char Auswahl_b[10] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'};
        for (int i = 0; i <= 4000000; ++i) {
            if (e <= 8) {
                ++e;
                b = Auswahl_b[w];
                a = Auswahl_a[e];
                Kombi[i] += WortVec[q];
                Kombi[i] += b;
                Kombi[i] += a;
                cout << "Kombination Nr " << i << " = " << Kombi[i] << endl;
                continue;
            } else if (e > 8 && w <= 8) {
                ++w;
                e = 0;
                b = Auswahl_b[w];
                a = Auswahl_a[e];
                Kombi[i] += WortVec[q];
                Kombi[i] += b;
                Kombi[i] += a;
                cout << "Kombination Nr " << i << " = " << Kombi[i] << endl;
                continue;
            } else if (w > 8 && q < 207800) {
                ++q;
                e = 0;
                w = 0;
                b = Auswahl_b[w];
                a = Auswahl_a[e];
                Kombi[i] += WortVec[q];
                Kombi[i] += b;
                Kombi[i] += a;
                cout << "Kombination Nr " << i << " = " << Kombi[i] << endl;
                continue;
            } else {
                x = i;
                break;
            }
        };
        cout << "|ES WURDEN " << x << " KOMBINATIONEN GETESTET|";
        cin.sync();
        cin.get();
        return 0;
    }
    

    Also jede Kombination soll ein Wort aus einer Wortliste (Wortliste.txt) enthalten und dieses mit einer 2 stelligen Zahl versehen.

    Mod-Edit (camper): Code-tags + clang-format



  • Du schreibst 207500 Einträge in deinen Vektor, versuchst aber auf 4.000.000 verschiedene Stellen im Vektor zuzugreifen. Das kann nicht funktionieren.

    Ansonsten bin ich mir nicht ganz sicher, was du mit deinem Code wirklich erreichen möchtest.
    Zum Beispiel scheinst du die 9 für deine Zahlenkombination nicht zu benutzen. Sollen die Zahlen Wort Kombinationen irgendwie aufsteigend sein? Also sowas wie
    Wort1 + alle zahlen von 00 - 99?



  • Verdammt immer diese dummen Fehler! Danke schön 😃
    Jap, jedes Wort wird 100 Mal ausgegeben



  • Gerne!

    Wenn es dir nur ums ausgeben geht, kannst du dir die zweite for Schleife an der Stelle sparen. Benutz doch einfach nachdem du das Wort eingelesen hast, eine Schleife von 0-99 und bastel dir die Kombination zusammen. Wenn die ersten 10 Ziffern immer mit 00, 01 etc. nummeriert sein sollen, musst du das natürlich auch noch entsprechend mit rein nehmen.
    Damit sparst du dir nicht nur eine Schleife sondern auch das Zwischenspeichern in Vektoren.

    Auch in deinem Ansatz kannst du den Vektor Kombi getrost streichen und einfach in deiner Schleife einen String definieren, den du anstelle des Vektors benutzt.

    Außerdem ist es unschöner Stil, mit deinem else{break}. Du kannst dir vorher überlegen wie viele Schleifendurchläufe du genau benötigst.


Anmelden zum Antworten