Zahlenschloss



  • Hallo,
    ich bins mal wieder.

    Es geht um ein Mathematisches Problem.

    Mein freund hat mir ein Programm programmiert,
    dass ein Zahlenschloss Simuliert!

    Es hat 12 Räder die jeweils 2 Zahlen haben ( 0 und 1 )

    Beispiel:
    Rad 1 Rad 2 Rad 3 ...... Rad 12
    [0] [1] [1] [0]

    Nun bräuchte ich ein Algorhytmus, der alle Kombinationen ausprobiert,
    also zuerst "000000000000" dann "100000000000" dann "11000000000" usw.
    Also immer binary wert + 1 addieren und dann jede Zahl in eine
    eigene Variable speichern:

    int StelleEins = 0;
    int StelleZwei = 1;
    ....
    int StelleZwoelf = 0;

    Danke schonmal fuer eure Ideen 🙂
    Zahlenschlösser sind lustig 😃



  • Damit?

    template<class T>
    bool bitValue(T value, int num) {
        return ( (value >> num) & 1 ) > 0;
    }
    
    for(int i=0; i<(1<<stellenDesSchloss); ++i) {
        stelle_a = bitValue(i, 0);
     ...
    }
    


  • Hmm ich hab jetzt nen Problem,
    Ich hab die Nummer

    char binarya[33];
    

    jetzt definiert und belegt

    MsgBox(NULL, binarya, "Code", NULL);
    gibt aus:
    100000000000

    aber wenn ich mache:
    MsgBox(NULL, binarya[10], "Code", NULL);

    oder
    MsgBox(NULL, (LPCSTR)binarya[10], "Code", NULL);

    Kriege ich nicht "0" als Ausgabe



  • Hmm jetzt habe ich es, aber er scheint nicht alle Kombinationen
    durchzugehen..... er schafft es nicht den code zu knacken,
    die erste stelle ist ja z.B. immer 1 und fast nie 0...
    das dürfte eigentlich nicht sein!

    Hat jemand ne gute Methode wie man jede Zahl bekommt?



  • 12 Räder die jeweils 2 Zahlen haben ( 0 und 1 )

    quasi 12 bit -> trivial:
    lass nen int von 0 bis 2^12 laufen, extrahiere die einzelnen bits und uebergib's an dein "schloss"

    char code[13];
    strcpy(code, "000000000000"); // damit isses schonmal null-terminiert
    for (int counter=0;counter<(1<<12);counter++)
    {
      for (int j=0;j<12;j++) code[j]= '0'+(counter>>j&1);
      // -> "code" ausprobieren
    }
    


  • hellihjb schrieb:

    12 Räder die jeweils 2 Zahlen haben ( 0 und 1 )

    quasi 12 bit -> trivial:
    lass nen int von 0 bis 2^12 laufen, extrahiere die einzelnen bits und uebergib's an dein "schloss"

    char *code="000000000000"; // damit isses schonmal null-terminiert
    for (int counter=0;counter<(1<<12);counter++)
    {
      for (int j=0;j<12;j++) code[j]= '0'+(counter>>j&1);
      // -> "code" ausprobieren
    }
    

    Sorry aber ich verstehe deinen Code nicht ganz,
    wie füge ich die einzelnen Zahlen denn jetzt hier ein?:

    char numberone;
    char numbertwo;
    char numberthree;
    char numberfour;
    char numberfive;
    char numbersix;
    char numberseven;
    char numbereight;
    char numbernine;
    char numberten;
    char numbereleven;
    char numbertwelve;
    


  • omg, nimm nen array!



  • lolz schrieb:

    omg, nimm nen array!

    Ich mach das, weil ich die sonst nicht anzeigen kann

    numberone = binarya[0] - '0'; 
    numbertwo = binarya[1] - '0'; 
    numberthree = binarya[2] - '0'; 
    numberfour = binarya[3] - '0'; 
    numberfive = binarya[4] - '0'; 
    numbersix = binarya[5] - '0'; 
    numberseven = binarya[6] - '0'; 
    numbereight = binarya[7] - '0'; 
    numbernine = binarya[8] - '0'; 
    numberten = binarya[9] - '0'; 
    numbereleven = binarya[10] - '0'; 
    numbertwelve = binarya[11] - '0';
    

    ist ja eigentlich nen array 😃

    for (int counter=0;counter<(1<<12);counter++)
    {
      for (int j=0;j<12;j++) code[j]= '0'+(counter>>j&1);
      // -> "code" ausprobieren
    }
    

    lässt sich compilieren aber lässt das programm bei aufruf crashen, da muss nen Fehler drin sein -.-

    Kann das jemand mal mit "cout" probieren?

    Dass er dann alle Kombinationen ausgibt?



  • Das Problem ist, daß du über den Zeiger code nicht schreiben kannst. Nimm ein std::string statt eines char *, dann geht es (inludieren von <string> nicht vergessen).



  • Jetzt geht es wenn ich alles ausgeben lasse, aber

    if( (code[0] == 1 && one == false) || (code[0] == 0 && one == true) )
    

    triggert nicht mehr.... gibt immer false weiter oder so -.-

    cout << code[0] << endl;
    funktioniert, ich kriege Nullen oder Einsen!



  • code ist ein String. Folglich stehen da die 0- und 1-Werte als Zeichen drin. Das heißt du vergleichst nicht mit 0 und 1, sondern mit '0' und '1'.



  • Ok vielen dank,
    jetzt läuft alles Prima 👍

    Ihr seid die Besten, und ich hab wieder was dazugelernt 🙂


Anmelden zum Antworten