Wieder die Zufallszahlen

J

john200

Hi,

folgender Code:

while (ok==0) {

zz1=rand () % 9+1 ;

.....
.....
irgendwann --> ok=1;

}

Diese Schleife erzeugt mir Zufallszahlen bis irgendwann ok auf 1 gesetzt wird, das funktioniert auch.
Aber der Zufallszahlengenerator macht mir immer die gleichen Zufallszahlen, bzw jedenfalls in einem durchlauf, muss daran liegen das dies so unglaublich schnell passiert ( habe auch vorher mit time(0) ... etc die rand funktion initialisiert).

Wie kriege ich bessere sich nach jedem durchlauf unterscheidene Zufallszahlen in "C" ?
 
Hi,
Ich habe jetzt nicht verstanden ob dein Problem ist das immer dieselbe Zahl kommt also du bspw. 100 zahlen mit der 9 hast oder bei jedem Programmaufruf dieselbe Folge kommt.
Letzteres liegt daran das rand() immer dieselbe Zufallsfolge macht, damit das Programm reproduzierbar ist. Wenn du wirklich Zufallszahlen haben möchtest musst du
srand() nutzen. Und eine zufällige zahl übergeben z.B time(0).
Bei ersterem Fall liegts eher an deinem Quelltext.

Gruß Jennesta

€: Hier noch ein Beispiel zur Nutzung von srand()

Code:
/* srand example */
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main ()
{
  printf ("First number: %d\n", rand() % 100);
  srand ( time(NULL) );
  printf ("Random number: %d\n", rand() % 100);
  srand ( 1 );
  printf ("Again the first number: %d\n", rand() %100);

  return 0;
}
 
Zuletzt bearbeitet:
Hi.

Damit man nicht immer die gleiche Zahl (oder eine ähnliche) am Anfang bekommt, sollte nachdem man srand() aufgerufen hat nochmal rand() aufrufen und so die erste "Zufallszahl" verwerfen.

Außerdem sollte man nicht den Modulo-Operator verwenden um den Zahlenbereich einzuschränken. Siehe z.B. http://cplus.kompf.de/artikel/random.html

Gruß
 
So also ich komme mal mit konkreterem Code, das meiste was ihr sagtet, hatte ich auch schon verwendet, es geht aber immer noch nicht

Code:
              ..... code .....

              srand(time(0)); 
                                      
              while(ok==0){
              
                      zz = rand()%9+1;
                      
                      if ((zz==sudoku[incr3][incr4]) || (zz==sudoku[incr3][incr4+1]) {        
                             
                              ok=0;    
                      }    
                      else{   
                          
                              sudoku[j][i] = zz;
                               ok =1;
                      }                          
          
             }
             ok=0;

Die Funktion füllt mir mein 2-dimensionales Sudoku-Array mit den zufälligen Zahlen 1-9 aus, und sich ergebend aus meinen Schleifen die ich hier nicht mit aufgeführt habe, wird das immer Würfel für Würfel gemacht, ein durchlauf der While Schleife erzeugt 9 Zahlen.(gibt noch forschleifen die dafür sorgen)

Das heist die While schleife erzeugt 9 mal jeweils 9 Zahlen, und diese wiederholen sich aber immer.
Spricht erster durchlauf Zahlen z.B. 9,5,2,6,1,4,7,8,3 . Beim 2ten mal kommen aber wieder diese Zahlen usw ! ?
 
Spricht erster durchlauf Zahlen z.B. 9,5,2,6,1,4,7,8,3 . Beim 2ten mal kommen aber wieder diese Zahlen usw ! ?
Du darfst srand nur einmal aufrufen und die erste Zufallszahl verwerfen. Und du solltest den Modulo Operator nicht verwenden.

Gruß

PS: Und bitte mach dich mit dem Forum vertraut und nutze die Code-Tags für deine Codeschnipsel.
 
JAAAAY das war des Rätsels Lösung, srand mit dem Time Zeugs darf nur einmal aufgerufen werden, es wurde durch meine Schleifen aber immer wieder und daher gabs irgendwie dieselben Zahlen ^^

Danke jetzt gehts !! : P
 
Zurück