Liste mit beliebig langen Stellen



  • VirusMaker schrieb:

    ...volkard der mir gezeigt hat, wie mans in C einbaut

    *räusper* std.next_permutation() gibts nicht in C.
    🙂



  • ;fricky schrieb:

    VirusMaker schrieb:

    ...volkard der mir gezeigt hat, wie mans in C einbaut

    *räusper* std.next_permutation() gibts nicht in C.
    🙂

    echt? aja, klassen gibts ja erst ab C++ -.-

    ist mir aber echt wurscht jetzt 😃
    vielleicht kann ein mod verschieben oder was, ich bin glücklich und zufrieden 😃

    MFG



  • VirusMaker schrieb:

    vielleicht kann ein mod verschieben oder was

    wohin? einen trashcan gibts hier nicht. und im C++ forum werden sie über dich herfallen, weil du printf/scanf statt cout/cin nimmst. *fg*
    wofür brauchst du das eigentlich? hausaufgabe oder nur so zum spass? wenn ersteres, dann poste doch mal den text der aufgabe. deinen vielen widersprüchlichen beschreibungen nach glaube ich nämlich, dass du sie immer noch nicht verstanden hast.
    🙂



  • ;fricky schrieb:

    VirusMaker schrieb:

    vielleicht kann ein mod verschieben oder was

    wohin? einen trashcan gibts hier nicht. und im C++ forum werden sie über dich herfallen, weil du printf/scanf statt cout/cin nimmst. *fg*
    wofür brauchst du das eigentlich? hausaufgabe oder nur so zum spass? wenn ersteres, dann poste doch mal den text der aufgabe. deinen vielen widersprüchlichen beschreibungen nach glaube ich nämlich, dass du sie immer noch nicht verstanden hast.
    🙂

    die erweiterung mach ich nur, um mich weiterzubilden!

    leider gehts so auch nicht, wie ich vorher geschrieben hat 😞 😞 😞
    ich bin im moment voll verzweifelt!
    wie soll ich dass machen?

    also wenn er 5 stellen hat, müsst er doch zuerst die ersten 5 permutieren, dann 6, dann 7 usw, damit er auch alles, wirklich alles permutiert hat 😞

    bitte helft mir 😞

    MFG

    EDIT:

    char schwS[26];
        printf("Anzahl: ");
        scanf("%d",&sA);
        int i=sA;
    
        char schw[26];
        strcpy(schw,"ABCDEFGHIKLMNOPQRSTUVWXYZ");
    
        do
        {
            do
    	    {
                strcpy(schwS,schw);
                schwS[sA]=0;
                printf("%s\n",schw);   
    	    }
            while(std::next_permutation(schw,schw+sA));
    
    //HIER FEHT WAS!?!
    
        } while(schw[0]!='Z'); //es sollte bei 5 mit ZYXWV aufhöhren
    }
    

    soweit hab ichs schonmal



  • ;fricky schrieb:

    wofür brauchst du das eigentlich?
    🙂

    Das sieht nach einem Passwort Brutforce Programm aus, um das System zu hacken und einen schwulen Virus einzuschleusen.



  • VirusMaker schrieb:

    die erweiterung mach ich nur, um mich weiterzubilden!

    das ist gut und lobenswert, dann haste ja auch keinen stress, irgendwas fertiges abgeben zu müssen.

    VirusMaker schrieb:

    also wenn er 5 stellen hat, müsst er doch zuerst die ersten 5 permutieren, dann 6, dann 7 usw, damit er auch alles, wirklich alles permutiert hat.

    mal was zum begriff permutation: bei permutationen gibts eigentlich keine reihenfolge. es bedeutet nur vertauschen der elemente von durchnumerierten dingen. z.b. abcd wird zu bdca, das ist dann *eine* permutation. willst du irgendwie sowas wie 'alle permutationen einer menge ohne wiederholung', also sowas wie nwp2's python-code und volkards std_nextPermutation(), oder willst du alle möglichen kombinationen der buchstaben a bis z, auf n stellen begrenzt, ohne dass im resultset elemente mehrfach auftauchen (was mein code hoffenlich macht)?

    volkard featuring nwp2 für 3 elemente (vollständig):

    abc
    acb
    bac
    bca
    cab
    cba
    

    mein beispiel (3-stellige ausgabe, a...z):

    abc
    abd
    abe
    abf
    abg
    abh
    abi
    abj
    abk
    abl
    abm
    abn
    abo
    abp
    abq
    abr
    abs
    abt
    abu
    abv
    abw
    abx
    aby
    abz
    acb
    acd
    ace
    acf
    acg
    ach
    ... usw...
    

    ach ja, und für welche programmiersprache soll es sein? wie gesacht, nextPermutation() hat C nicht, müssteste dir selber bauen oder so.
    🙂



  • c oder c++ solls sein, lernen wir halt gerade!

    und deins würde schon passen, jop!

    und mit der permutation:
    wenn 5, dann:
    abcde-edcba
    das ist das letzte ergebnis wenn man die permutieren lässt!

    um jetzt die anden buchstaben des alphabets auch noch dazunehmen will, müsste man doch a-f als nächstes permutieren lassen...
    iwie pack ichs aber nicht 😞



  • Big Brother schrieb:

    Das sieht nach einem Passwort Brutforce Programm aus, um das System zu hacken und einen schwulen Virus einzuschleusen.

    ok, aber dafür sind ja wiederholungen der zeichen in den wörtern nötig. dann wären wir ja doch wieder beim mod(irgendwas) -counter.
    🙂



  • ;fricky schrieb:

    Big Brother schrieb:

    Das sieht nach einem Passwort Brutforce Programm aus, um das System zu hacken und einen schwulen Virus einzuschleusen.

    ok, aber dafür sind ja wiederholungen der zeichen in den wörtern nötig. dann wären wir ja doch wieder beim mod(irgendwas) -counter.
    🙂

    ja, iwie will ich einfach eine liste machen, und verstehen, wie sowas gehen soll, hat nix mit hacken oder was weiß ich!



  • VirusMaker schrieb:

    und deins würde schon passen, jop!

    dann nimm das doch, aber denk daran, erstmal wortlisten zu benutzen. eine reine brute-force attacke kann verdammt lange dauern *fg*
    🙂



  • VirusMaker schrieb:

    ja, iwie will ich einfach eine liste machen, und verstehen, wie sowas gehen soll, hat nix mit hacken oder was weiß ich!

    ob du hacken/cracken/sonstwas willst oder nicht, ist mir ziemlich wumpe (bin selbst extremer raubkopierer und file-sharer etc.). am besten, du postest hier mal eine folge von mindestens 50 strings hin, die so ein programm erzeugen soll, damit wir überhaupt wissen, was du möchtest. *fg* aus deinen erklärungen werde ich jedenfalls nicht schlau.
    🙂



  • ;fricky schrieb:

    VirusMaker schrieb:

    ja, iwie will ich einfach eine liste machen, und verstehen, wie sowas gehen soll, hat nix mit hacken oder was weiß ich!

    ob du hacken/cracken/sonstwas willst oder nicht, ist mir ziemlich wumpe (bin selbst extremer raubkopierer und file-sharer etc.). am besten, du postest hier mal eine folge von mindestens 50 strings hin, die so ein programm erzeugen soll, damit wir überhaupt wissen, was du möchtest. *fg* aus deinen erklärungen werde ich jedenfalls nicht schlau.
    🙂

    ich hab einen string:
    "ABCDEFGHIJKLMNOPQRSTUVWXYZ"

    bei 3 stellen soll er aus dem string ALLE kombis machen:

    abc
    abd
    abe
    abf
    abg
    abh
    abi
    abj
    abk
    abl
    abm
    abn
    abo
    abp
    abq
    abr
    abs
    abt
    abu
    abv
    abw
    abx
    aby
    abz
    acb
    acd
    ace
    acf
    acg
    ach
    bishin zu:
    zab
    zac
    zad
    ...
    zxy
    usw!
    

    er sollte aber alle aus dem char[] string machen, damit ich die danach auch ändern kann!

    also z.b. beim String "WAT":
    1 Stelle:
    W
    A
    T
    2 Stellen
    WA WT AW AT TW TA
    und bei 3:
    WAT WTA AWT ATW TAW TWA

    also alle kombis, so das aber 2 chars nicht gleichzeitig sein können! also nicht WAA orso!

    ich hoffe das ist jetzt klar



  • VirusMaker schrieb:

    ich hoffe das ist jetzt klar

    ok, ich versuche es nochmal:

    #include <stdio.h>
    
    char source[] = "WAT"; // <--- dein string dessen, permutationen ausgegeben werden sollen
    #define N (sizeof(source)-1)
    #define LIMIT N  // <--- anpassen, 1...N
    
    int use[N];
    int res[N];
    
    void mix (int i)
    { 
       int k;
       // ausgabe
       if (i >= LIMIT) 
       {
          for (k=0; k<LIMIT; k++) 
             putchar (source[res[k]]);
          puts("");
          return;
       }
       // neu mischen
       for (k=0; k<N; k++)
       { 
          if (use[k] == 0)
          { 
             use[k] = 1; 
             res[i] = k;
             mix (i+1);
             use[k] = 0;
          }
       }
    }
    
    int main()
    { 
       mix(0);
    }
    

    ^^schau oben, LIMIT steht auf N, setze es auf (N-1) und es gibt dir

    WA
    WT
    AW
    AT
    TW
    TA

    aus. ist nur 'ne leichte modifikation meines vorschlags von vorhin, die 'fricky-extension' bewährt sich scheinbar. *fg*
    🙂



  • ;fricky schrieb:

    VirusMaker schrieb:

    ich hoffe das ist jetzt klar

    ok, ich versuche es nochmal:

    #include <stdio.h>
    
    char source[] = "WAT"; // <--- dein string dessen, permutationen ausgegeben werden sollen
    #define N (sizeof(source)-1)
    #define LIMIT N  // <--- anpassen, 1...N
    
    int use[N];
    int res[N];
    
    void mix (int i)
    { 
       int k;
       // ausgabe
       if (i >= LIMIT) 
       {
          for (k=0; k<LIMIT; k++) 
             putchar (source[res[k]]);
          puts("");
          return;
       }
       // neu mischen
       for (k=0; k<N; k++)
       { 
          if (use[k] == 0)
          { 
             use[k] = 1; 
             res[i] = k;
             mix (i+1);
             use[k] = 0;
          }
       }
    }
    
    int main()
    { 
       mix(0);
    }
    

    ^^schau oben, LIMIT steht auf N, setze es auf (N-1) und es gibt dir

    WA
    WT
    AW
    AT
    TW
    TA

    aus. ist nur 'ne leichte modifikation meines vorschlags von vorhin, die 'fricky-extension' bewährt sich scheinbar. *fg*
    🙂

    hm...
    ok, source ist mir klar!

    aber für was genau ist use und res?

    und wenn ich das fertige wort wieder in einen string zu speichern, muss ich nur das machen, oder:

    if (i >= LIMIT) 
       {
          for (k=0; k<LIMIT; k++) 
             string2[k] = source[res[k]];
          string2[k]=0;
          printf("%s",string2);
          return;
       }
    

    und das:

    if (use[k] == 0)
          { 
             use[k] = 1; 
             res[i] = k;
             mix (i+1);
             use[k] = 0;
           }
    

    das use[k]=0; wird dann ja nie ausgeführt!

    mfg



  • VirusMaker schrieb:

    und das:

    if (use[k] == 0)
          { 
             use[k] = 1; 
             res[i] = k;
             mix (i+1);
             use[k] = 0;
           }
    

    das use[k]=0; wird dann ja nie ausgeführt!

    doch klar, 'mix' ist ja keine endlosschleife. setz 'nen breakpoint darauf, dann siehste, dass er da hinkommt.
    🙂



  • Hab auch was an Code:

    #define N 4 // Anzahl der Zeichen im Zeichenvorrat. 
    #define M 3 // Anzahl der Zeichen aus dem Zeichenvorrat, die permutiert werden (1 <= M <= N). 
    
    int main()
    { 
    	char abc[N] = "?*&!"; // Zeichenvorrat.
    	int s[M] = {0}; // Mappt die Zeichen aus dem Zeichenvorrat auf den Puffer.
    	char buf[M+1] = {0}; // Anzeige der Permutationen.
    
    	int i = M-1, j=i, A = 0, Z = N-1;
    	memset( buf, abc[0], M );
    
    	while(1){
    		while (s[i]<=Z) buf[i] = abc[s[i]], puts(buf), s[i]++;
    		s[i]--;
    		while (s[i]==Z && i>=0 ) s[i] = A, buf[i] = abc[A], i--;
    		if ( i>=0 ) s[i]++, buf[i] = abc[s[i]], i=j;
    		else break;
    	}
    
    	return 0;
    }
    

    :p



  • ;fricky schrieb:

    #include <stdio.h>
    
    char source[] = "WAT"; // <--- dein string dessen, permutationen ausgegeben werden sollen
    #define N (sizeof(source)-1)
    #define LIMIT N  // <--- anpassen, 1...N
    
    int use[N];
    int res[N];
    
    void mix (int i)
    { 
       int k;
       // ausgabe
       if (i >= LIMIT) 
       {
          for (k=0; k<LIMIT; k++) 
             putchar (source[res[k]]);
          puts("");
          return;
       }
       // neu mischen
       for (k=0; k<N; k++)
       { 
          if (use[k] == 0)
          { 
             use[k] = 1; 
             res[i] = k;
             mix (i+1);
             use[k] = 0;
          }
       }
    }
    
    int main()
    { 
       mix(0);
    }
    

    ;fricky du gott! deins funzt wie ich es mir immer gewünscht hab 👍
    ich bin dir ja so dank bar!

    ich will das jetzt alle möglichkeiten in eine liste speichern!
    ich weiß leider nicht, wie das geht in c, nur in c++!

    und ich hoffe da kann mir auch wer weiterhelfen!

    if (i >= LIMIT)
       {
          for (k=0; k<LIMIT; k++)         string2[k] = source[res[k]];
          string2[k]=0; 
          of << string2 << endl;
          printf("%s\n",string2);
          return;
       }
    

    ich hab das jetzt so eingebaut, damit es alles in nen string kopiert, und in dann mit ofstream of;of.open("a.txt"); durch of << string2; reinspeichert!
    leider macht er nur immer das letzte, und überschreibt das alte, obwohl ich die immer geöffnet lass...

    wenn mir hier keiner hilft, muss ich ins c++ forum reinschreiben!
    aber ich will jetzt dafür nicht extra ein thema aufmachen!

    jedenfalls danke noch mal fricky!



  • Du solltest die Datei vorher, in der main() anlegen.
    Oder, um dich dem Code des göttliche fricky anzupassen, als globale Variable.
    ofstream of("a.txt"); //global ganz oben
    of<<string2; //woimmer du magst



  • volkard schrieb:

    Du solltest die Datei vorher, in der main() anlegen.
    Oder, um dich dem Code des göttliche fricky anzupassen, als globale Variable.
    ofstream of("a.txt"); //global ganz oben
    of<<string2; //woimmer du magst

    stimmt 😃
    hab vergessen, das die funktion ja immer wieder aufgerufen wird!

    danke euch beiden, kann geclosed werden 🙂

    und allen ein fröhliches weihnachten :xmas1:



  • Big Brother schrieb:

    Hab auch was an Code:

    das ist ja wieder so'n counter. davon gibts in diesem thread schon 5 oder 6 varianten.

    VirusMaker schrieb:

    deins funzt wie ich es mir immer gewünscht hab

    siehste wohl, dann hat es der griesgrämige nwp2 völlig grundlos zerrissen. *fg*

    volkard schrieb:

    Du solltest die Datei vorher, in der main() anlegen.
    Oder, um dich dem Code des göttliche fricky anzupassen, als globale Variable.
    ofstream of("a.txt"); //global ganz oben
    of<<string2; //woimmer du magst

    na klar, und schon hat er's mit code zu tun, der vor der 'main' aufgerufen wird. auch ein ganz tolles feature von c++ *gg*
    🙂


Anmelden zum Antworten