1. Liebe Forumsgemeinde,

    aufgrund der Bestimmungen, die sich aus der DSGVO ergeben, müssten umfangreiche Anpassungen am Forum vorgenommen werden, die sich für uns nicht wirtschaftlich abbilden lassen. Daher haben wir uns entschlossen, das Forum in seiner aktuellen Form zu archivieren und online bereit zu stellen, jedoch keine Neuanmeldungen oder neuen Kommentare mehr zuzulassen. So ist sichergestellt, dass das gesammelte Wissen nicht verloren geht, und wir die Seite dennoch DSGVO-konform zur Verfügung stellen können.
    Dies wird in den nächsten Tagen umgesetzt.

    Ich danke allen, die sich in den letzten Jahren für Hilfesuchende und auch für das Forum selbst engagiert haben. Ich bin weiterhin für euch erreichbar unter tti(bei)pcwelt.de.
    Dismiss Notice

zufallszahlen sind irgendwann immer das selbe

Discussion in 'Programmieren' started by B-Brot, Jul 23, 2008.

Thread Status:
Not open for further replies.
  1. B-Brot

    B-Brot Byte

    Also... ich brauche in C- programmierung zufallszahlen 20 zufallszahlen von 1 bis 81. problem dabei ist nur das öfter mal die gleichen auftauchen z.b. 2x die 37. gibt es eine möglichkeit die randfunktion zu erweitern und dadurch zu verhindern das bereits ausgegebende zufallszahlen ein zweites mal auftauchen?
    PHP:
    #include <conio.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    int zahl,x=0;
    time_t t;
    srand((unsigned)time(&t)); 
    /*wenn ich srand direkt vor dem aufruf von rand setze kommt mehrmals die gleiche zahl und nach dem vergehen von wahrscheinlich ungefähr ner sekunde eine neue zufahlszahl*/
    do
    {
    zahl rand() % 82;    //gibt dieses auch 0 aus?
    ***
    ***
    ***
    x++;
    }
    while (
    x!=20);
    kann man vielleicht auch srand präziser werden lassen... damit nicht "ewig" lange die gleiche zahl kommt....

    hoffe man blickt hier durch....
    danke an alle und PC-welt ;-)
     
  2. TheD0CT0R

    TheD0CT0R Dr. h.c. Mod

    Das ist doch normal. Beim Würfeln kann es auch passieren dass fünf mal hintereinander die Vier kommt. Ist zwar unwahrscheinlich, aber möglich.

    Dann sind das aber keine Zufallszahlen mehr. Oder ist es eine feste Vorgabe dass jede Zahl nur einmal auftauchen darf (analog "Ziehunh ohne Zurücklegen" aus der Statistik)?
     
  3. Simon11444

    Simon11444 Megabyte

    Ich denke mal das ganze soll ohne Zurücklegen sein.
    Tue einfach alle bis jetzt ausgegebenen Zahlen in ein Array einlesen, dann mach eine Schleife, die immer überprüft ob die Zahl drinnen ist, wenn ja, neue Zahl und wieder prüfen, falls nein, raus aus der Schleife und Zahl in Array einlesen

    ja, kann 0 ausgeben, wenn du das nicht willst, mach rand von 0-81 + 1
     
    Last edited: Jul 23, 2008
  4. AS_X

    AS_X Halbes Megabyte

    Durch Initialisierung mit der aktuellen Zeit ist es nicht sehr verwunderlich, dass da oft dieselben Zahlen rauskommen. Dieses Problem haben aber alle Zufallszahlengeneratoren.

    Mein Tipp (Pseudocode):

    Code:
    
    a : ARRAY[1..81] OF INT // (*)
    i : INT
    j: INT
    c: INT
    
    c := 81
    
    // Initialisiere jedes Arrayelement mit seinem Index
    // also a[1] = 1 bis a[81] = 81 (*)
    FOR i := 1 TO LEN(a) DO
      a[i] := i
    ENDFOR
    
    FOR i = 1 TO 20 DO
    
      j := RANDOM(c) // Zufallszahl zwischen 1 und c (*)
      
      SWAP(a, j, c) // Vertausche Arrayelemente an den Indizes j und c
    
      c := c - 1
    
    ENDFOR
    
    OUTPUT = SUBARRAY(a, 61, 81) (*)
    // die letzten 20 Zahlen im Array sind die gewünschten Zufallszahlen
    
    // (*) = ggf. Anpassung wg. 0-basiert
    
    Ich hoffe, das ist verständlich. Wenn nicht, werde ich mich gegen später ggf. um eine verständliche Lösung bemühen.

    Viel Erfolg
    Andreas
     
  5. B-Brot

    B-Brot Byte

    ich werde mich an Simon11444 seine antwort halten...
    das andere ist mir den doch etwas zu kompliziert :-)
    danke trotzdem für die Antworten leute
     
  6. AS_X

    AS_X Halbes Megabyte

    Naja, die von Simon11444 angegebene Lösung hat mindestens quadratischen Aufwand in der Größe der zu generierenden Zahlen. Meine Lösung hat linearen Aufwand -> ist schneller, wenn die Auswahl der Zahlen nicht so groß ist.

    Aber wie du willst... ;)
     
Thread Status:
Not open for further replies.

Share This Page