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 Nummerchar binarya[33];jetzt definiert und belegt
MsgBox(NULL, binarya, "Code", NULL);
gibt aus:
100000000000aber 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
