Wörterlistenprogramm



  • Danke schon für die Antworten 😉
    Hat mir schon geholfen mit Permutation!



  • Hoppala 😃
    Hab das mal so abgeändert:

    #include <iostream>
    #include <algorithm>
    using namespace std;
    
    int main () {
      char mychars[] = {'A','a','B','b','C','c','D','d','E','e','F','f','G','g','H','h','I','i','J','j','K','k','L','l','M','m','N','n','O','o','P','p','Q','q','R','r','S','s','T','t','U','u','V','v','W','w','X','x','Y','y','Z','z'};
    
      cout << "The 3! possible permutations with 3 elements:\n";
    
      sort (mychars,mychars+52);
      int i = 0;
      do
      {
    	  cout << mychars[i] << mychars[i++] << endl;
    	  i++;
      } while ( next_permutation (mychars,mychars+52) );
      cin.get();
      return 0;
    }
    

    Aber wenn ich das Programm dann starte, flimmert die Konsole erst und dann fängt mein Computer wie wild an zu piepsen ein paar mal und nach ner Zeit kommt ne Fehlermeldung: "Permutator.exe funktioniert nicht mehr"...und wenn man dann in die Konsole schaut sind da lauter Herzchen und Smiles und sowas nur xD Eindeutig der coolste Programmfehler den ich bisher gesehen hab :D:D
    Manchmal piepst auch nur die ganze Zeit und rattert in der Konsole lauter Buchstaben, Smiles und Herzchen runter 😃

    Aber mal wieder Ernst...
    woran liegt das? Braucht zu viel Ressourcen? Oder kann Permutation einfach nicht mit 52 Elementen umgehen?

    Hoffe auf Antwort! 🙂
    Finn



  • Dein mychars hat 52 Elemente. Dein i wird aber deutlich größer als 52, daher gibts du einfach wahlos Speicherstellen aus bis du auf Speicher zugreifst der dem Programm nicht zugewiesen wurde. Die Smilies, Herzen und Beeps sind übrigens werte irgendwo zwischen 0 und 0x20.

    Edit: Die Permutation scheint hier aber auch nicht zu passen. Damit kriegt man nur alle Anordnungen. Was hier gesucht ist sind Auswahlen. Dafür reichen die verschachtelten for Schleifen wenn du die Länge der gebildeten Wörter vorher festlegst.



  • Nein ich möchte schon alle Möglichkeiten bekommen 😃



  • so das hier hab ich jetzt:

    #include <iostream>
    #include <algorithm>
    using namespace std;
    
    int main () {
      char mychars[] = {'A','a','B','b','C','c','D','d','E','e','F','f','G','g','H','h','I','i','J','j','K','k','L','l','M','m','N','n','O','o','P','p','Q','q','R','r','S','s','T','t','U','u','V','v','W','w','X','x','Y','y','Z','z'};
    
      int a = 0;
      int b = 0;
      do
      {
    	  cout << mychars[a] << mychars[b] << endl;
    	  b++;
    	  if(b == 52){a++;b = 0;}
    
      } while ( a <= 52 );
    
      cin.get();
      return 0;
    }
    

    Aber funktioniert so nicht 😞 Probierts mal aus...warum auch immer fängt das bei xg an 😮

    Help pls 😕



  • ok, mit next_permutation geht es doch nicht, weil ja abc.......YZ nix anderes ist als abc........ZY ^^
    wirst es also doch mit schleifen machen müssen:

    ist aber gar nicht so trivial, wenn du die gleichen ergebnisse nicht haben möchtest:
    ist aber gar nicht mal so trivial^^

    sollte aber mit 3 forschleifen, nem array, 2 continue gehen, wenn mich nicht alles täuscht:

    pseudo-c++:

    vector = "A..Z a..z"
    for(i = vector.begin; i != vector.end; ++i)
    {
      for(j = vec.begin; j != vec.end; ++j)
      {
        if(*i == *j)
          continue;
    
        for(k = vec.begin; k != vec.end; ++k)
        {
          if(*k == *i || *k == *y)
            continue;
    
          std::cout << *i << *j << *k << std::endl;
        }
      }
    }
    

    bb

    edit: oh - du wolltest ja nur die ersten beiden zeichen... ^^
    dann kannst du die innerste schleife weglassen ;o)



  • Finn schrieb:

    Aber funktioniert so nicht 😞 Probierts mal aus...warum auch immer fängt das bei xg an 😮

    Also bei mir kommt es in folgender Form raus:

    AA
    Aa
    AB
    Ab

    Also so wie mychars angelegt ist. Allerdings gibt der sehr viel aus und es kann sein das man die Konsole nicht so weit hochscrollen kann.



  • Ja...danke meine Version funktioniert auch! Wenn ich das in ne File schreiben lass steht dann auch alles drin! Man kann in der Konsole einfach nicht weit genug hochscrollen 😉
    Danke an alle für die Hilfe...hab halt zu kompliziert gedacht, dabei wars ganz einfach 🙂
    Danke!
    Finn



  • Ach übrigens...hab das mal ausgeführt, dass es mir alle 1-5 stelligen anzeigen soll...mit 61 Zeichen 😃

    Hab das Programm ca. 2 Stunden laufen lassen, CPU-Auslastung 100%, Outputfile schon über 7 Gig und immer noch net fertig...habs dann abgebrochen, weil ich das mit keinem programm öffnen konnte 😃 Stand überall "Fehler" oder "Datei zu groß!" xD
    Mit 1-4 stelligen hats ca. 15 mins. gedauert bis es fertig war...und ich konnte es noch öffnen!^^

    Danke nochmal für die Hilfe
    Finn



  • Finn schrieb:

    Ach übrigens...hab das mal ausgeführt, dass es mir alle 1-5 stelligen anzeigen soll...mit 61 Zeichen 😃

    Hab das Programm ca. 2 Stunden laufen lassen, CPU-Auslastung 100%, Outputfile schon über 7 Gig und immer noch net fertig...habs dann abgebrochen, weil ich das mit keinem programm öffnen konnte 😃 Stand überall "Fehler" oder "Datei zu groß!" xD
    Mit 1-4 stelligen hats ca. 15 mins. gedauert bis es fertig war...und ich konnte es noch öffnen!^^

    Danke nochmal für die Hilfe
    Finn

    du solltest für so etwas ja auch kein next_permutation verwenden(weil eben auch jede Menge Müll ausgegeben wird, Bsp.: asd....AZ, asd....AY, asd....AX, ... obwohl du nur die ersten 5 zeichen brauchst...
    du siehst ja, wie ich das gemacht habe - wenn bei dir ein und der selbe buchstabe mehrfach vorkommen darf, dann lässt du das if(*a == *b) continue; einfach weg. Du musst einfach nur noch paar Mal die Schleife copy&pasten und ein wenig abändern ;o)



  • Na ich hab doch next_permutation gar net drinne...lasse mir einfach linear alle möglichen Kombinationen anzeigen


Anmelden zum Antworten