Frage

for(i = 0; i < n; i++){
        srand(time(NULL));
        printf("%d ", time(NULL));
        for(j = 0; j < (n-1); j++){
            a[i][j] = rand();
        }
    }

Ich versuche, Zufallszahlen zu erzeugen, aber sie sind die gleichen ... Ich versuche srand(i * time(NULL)). Ganz gleich.. Was soll ich tun?

Array-Deklaration:

int** a;
int i;
printf("Enter array size: ");
scanf("%d", &n);

a = (int**)calloc(n, sizeof(int));
for(i = 0; i < n; i++)
    a[i] = (int*)calloc(n-1, sizeof(int));
War es hilfreich?

Lösung

Anruf srand() außerhalb der Schleife. Du Nachsaat jeder Iteration es.

srand() Samen der Zufallszahlengenerator, so dass Sie eine andere Folge von Zufallszahlen erhalten in Abhängigkeit von der Eingabe. Ihre Schleife läuft sehr schnell, so dass der Anruf zu time(NULL) immer den gleichen Wert zurückgibt. Sie sind mit jeder Iteration auf die gleiche Zufallsfolge zurückzusetzen. Als allgemeine Regel gilt, rufen Sie nur srand() einmal in Ihrem Programm.

Andere Tipps

Rufen Sie nicht srand() jedes Mal durch die Schleife -. Tun Sie es einfach einmal vorher

13.15 13.20 wird von Interesse sein. Und ich bin versucht, einen neuen Tag für solche Fragen zu erstellen.

srand ist eine Funktion, die „Samen“ der Zufallszahlengenerator. Falls Sie nicht wissen, Zufallszahlen in Computern sind nicht wirklich zufällig. In der Tat hat der Computer nur eine Liste von Zahlen, die in ihm zufällig erscheinen, und Sie verwenden srand ihm zu sagen, wo in dieser Liste beginnen, mit jedem Aufruf rand() das nächste Element in der Liste zurück.

Der Grund, warum Sie srand(time(NULL)) schreiben, ist die Zufallszahl bekommen an einem gewissen Punkt zu starten, die nicht die gleiche sein wird, jedes Mal, wenn Sie das Programm ausführen (es sei denn, die Programme zur gleichen Zeit gestartet werden).

Also, was Sie hier tun, ist immer wieder das Programm erzählen die Zufallszahlenliste an derselben Stelle neu zu starten (weil die Zeit die gleiche jedes Mal, wenn durch die Schleife gehen). Bewegen Sie den Anruf an srand außerhalb der Schleife, und Sie werden die richtigen Ergebnisse erhalten.

alt text

srand(time(NULL)); 

for(i = 0; i < n; i++){         
        printf("%d ", time(NULL)); 
        for(j = 0; j < (n-1); j++){ 
            a[i,j] = rand(); 
        } 
    } 

Anruf srand einmal außerhalb der Schleife.

Sie müssen srand() aufrufen, bevor die Schleife eintritt. srand() initialisiert den radnom Zahlengenerator mit dem gegebenen Samen und erzeugt eindeutige Folge von Zufallszahlen für diese Samen.

Ihre Schleife führt eine sehr schnell, so dass jeder Anruf zu time(NULL) ergibt die gleiche Zeit (gemessen in Sekunden) -. Damit initialisieren Sie Zufallszahlengenerator mit dem gleichen Samen auf jeder Schleife Iteration

srand(time(NULL));
for(i = 0; i < n; i++){
    for(j = 0; j < (n-1); j++){
        a[i,j] = rand();
    }
}

Frage Nr. Die Zahl ist die gleiche ...

int** a;
int i;
printf("Enter array size: ");
scanf("%d", &n);
if( n < 1 ){
    printf("Size should be > 0\n\n");
    return NULL;
}
a = (int**)calloc(n, sizeof(int));
for(i = 0; i < n; i++)
    a[i] = (int*)calloc(n-1, sizeof(int));

Hier ist mein Array ...

Sergey, hast du keine Fehlermeldung mit der a[i,j] Version bekommt, nur weil dies ein absolut gültiger Ausdruck ist. Der Komma-Operator wertet die Unterausdrücke von links nach rechts und gibt den Wert des letzten Ausdrucks. Somit ist a[i,j] Schreiben identisch mit a[j]. Was Sie in dem Druck erhielten, war der Wert des Zeigers auf den j-ten Vektor in der Matrix.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top