unerwartetes Verhalten bei srand, bzw rand
-
Richtig!
Das Array muss sortiert sein! Das habe ich ganz vergessen..
Danke
-
Wenn du jetzt auf die Idee kommst, das Array zu sortieren, direkt bevor du bsearch verwendest, machst du etwas falsch.
-
Das srand machst man nur einmal im ganzen Programm. Am Besten irgendwo am Anfang von
main
.Wenn ich mir die erste Zeile deiner Funktion anschaue, ahne ich Schlimmes:
int* choose_bits(int m) { int bits[MAX_BITS]
Ich hoffe deine letze Zeile (in der Funktion) sieht nicht so aus:
return bits;
Denn nach dem Befehl hört bits auf zu existieren.
Du gibst also einen ungültigen Zeiger zurück.
-
Mach ein Array, in dem du die Zahlen von 1 bis 32 ablegst.
Dann holst du dir eine Zufallszahl im Bereich von 0 bis 31 und nimmst ...
... diese als Index auf das Array. Die dort abgelegte Zahl ist dein gesuchter Wert.Jetzt schreibst du die letzte Zahl aus dem Array an diese Stelle.
Dein Array ist jetzt kleiner, darum ist deine nächste Zufallszahl im Bereich von 0 bis 30 und nimmst ...
-
Hat noch jemand anderes die Ahnung, dass hinterher diese Zahlen benutzt werden, um einzelne Bits in einem Integer zu setzen? Falls das so ist, drängt es sich doch auf, gleich einen passenden Integer mit m zufälligen gesetzten Bits zu erzeugen, anstatt eine Rube-Goldberg-Maschine dafür zu bauen.
-
DirkB schrieb:
Das srand machst man nur einmal im ganzen Programm. Am Besten irgendwo am Anfang von
main
.Wenn ich mir die erste Zeile deiner Funktion anschaue, ahne ich Schlimmes:
int* choose_bits(int m) { int bits[MAX_BITS]
Ich hoffe deine letze Zeile (in der Funktion) sieht nicht so aus:
return bits;
Denn nach dem Befehl hört bits auf zu existieren.
Du gibst also einen ungültigen Zeiger zurück.Nein, keine Angst; ich habe noch einen Pointer auf bits. Habe nur irrelevantes aus dem code weggelassen, damit er nicht noch länger wird. Es ging mir hier nur um das Verhalten von srand, bzw bsearch.
SeppJ schrieb:
Hat noch jemand anderes die Ahnung, dass hinterher diese Zahlen benutzt werden, um einzelne Bits in einem Integer zu setzen? Falls das so ist, drängt es sich doch auf, gleich einen passenden Integer mit m zufälligen gesetzten Bits zu erzeugen, anstatt eine Rube-Goldberg-Maschine dafür zu bauen.
Ich will ein Programm zum "Verschlüsseln" eines Textes, bzw einer Datei schreiben.
Dazu will ich dann jedes Byte, das in der Datei steht, erstmal "verlängern" auf 4 Byte(cast als int) und dann genau m Bits dieser Int Zahl invertieren.
Ist natürlich kein Krypto-Algorithmus a la RSA, aber ich wollte sowas halt mal machenIch weiß jetzt nicht, wie genau du das mit dem "passenden Integer mit m zufälligen gesetzten Bits erzeugen" meinst.. Ich brauche halt m Zufallszahlen zwischen 1 und 32, um dann genau diese Bits jeder Zahl zu invertieren.
mfg
-
Zum lernen der Sprache ist dein vorhaben ok. Doch wenn du hier von verschlüsseln sprichst wird mir schlecht.
Mal abgesehen davon, wie stellst du dir die entschlüsselungs Funktion vor?
-
Ich habe "Verschlüsseln" doch extra in Klammern geschrieben
Der Key zum Entschlüsseln enthält die Bit-Positionen, die vorher invertiert wurden.
Die werden dann wieder zurückinvertiert.
-
blackroya schrieb:
Der Key zum Entschlüsseln enthält die Bit-Positionen, die vorher invertiert wurden.
Die werden dann wieder zurückinvertiert.Dann bekommst du den Key wenn ""verschlüsselt"" wurde? Oder wie ist das mit den Zufalls Zahlen?
Das was du da machst ist völliger Bullshit.
Versuche doch mal zbsp. Caesar oder eine monoalphabetische Substitution zu implementieren.
-
-lowbyte- schrieb:
Das was du da machst ist völliger Bullshit.
Versuche doch mal zbsp. Caesar oder eine monoalphabetische Substitution zu implementieren.Der Beitrag heißt übrigens nicht "Wie verschlüssele ich etwas so gut, dass tianhe-2 zwölf millionen Jahre brauchen würde, um es zu entschlüsseln"..