zufallszahlen erstellen

Dieses Thema im Forum "C/C++" wurde erstellt von Nemesis, 09.05.2006.

  1. #1 Nemesis, 09.05.2006
    Nemesis

    Nemesis N3RD

    Dabei seit:
    28.01.2005
    Beiträge:
    2.165
    Zustimmungen:
    0
    hi,
    ich habe beschlossen mir c beizubringen, und habe auch gleich das erste problem:

    ich möchte ein programm schreiben, welches mir 6 zahlen von 1 bis 49 zurück giebt.

    was ich bislang vollbracht habe ist folgendes:
    Code:
    # include <time.h>
    # include <stdio.h>
    # include <stdlib.h>
    
    int main (void)
            {
                    srand(time(NULL));
                    int i;
                    for (i = 1; i < 7; i++)
                            {
                                    printf("%d. Zahl: %e\n", i, (rand()%49));
                            }
                    return 0;
            }
    
    aber irgendwie will das nicht funktionieren, er gibt mir zwar 6 zahlen, aber jenseits von 49:
    Code:
    1. Zahl: 4.853247e-270
    2. Zahl: 4.853247e-270
    3. Zahl: 4.853247e-270
    4. Zahl: 4.853247e-270
    5. Zahl: 4.853247e-270
    6. Zahl: 4.853247e-270
    
    aber ich finde den fehler nicht, warum gibt er mir da solch komische zahlen aus?

    thx
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #2 Mµ*e^13.5_?¿, 09.05.2006
    Mµ*e^13.5_?¿

    Mµ*e^13.5_?¿ Routinier

    Dabei seit:
    21.02.2006
    Beiträge:
    453
    Zustimmungen:
    0
    also z.B.
    Code:
    printf("%d. Zahl: %d\n", i, (int) (1+(49.0*rand()/(RAND_MAX+1.0))) );
    ps: ich glaube das mit dem srand() stimmt auch noch nicht so.
     
  4. Sharoz

    Sharoz Mitglied

    Dabei seit:
    10.11.2005
    Beiträge:
    46
    Zustimmungen:
    0
    Doch, doch srand() ist schon wichtig. sonst bekommst du vermutlich immer die gleiche Zahl raus. Und time(0) ist auch soweit korrekt.
     
  5. #4 hoernchen, 09.05.2006
    hoernchen

    hoernchen UBERgarstiges nagetier

    Dabei seit:
    17.02.2005
    Beiträge:
    1.081
    Zustimmungen:
    0
    du solltest den bereich von rand eingrenzen :-)
     
  6. #5 Nemesis, 09.05.2006
    Nemesis

    Nemesis N3RD

    Dabei seit:
    28.01.2005
    Beiträge:
    2.165
    Zustimmungen:
    0
    ok, ich habs jetzt mal folgendermasen:
    Code:
    # include <time.h>
    # include <stdio.h>
    # include <stdlib.h>
    
    
    int main(void)
    	{
    		int i = 0;
    		srand(time(NULL));
    		for(i=1; i<7; i++)
    		printf("%i\n", rand() % (49 - 1 + 1) + 1);
    		return 0;
    	}
    
    das funktioniert auch, er gibt mir jetzt 6 zahlen in dem bereich aus, nur ist das nicht "mit der faust von hinten durch den rücken in den mund" ?
     
  7. #6 Mµ*e^13.5_?¿, 09.05.2006
    Mµ*e^13.5_?¿

    Mµ*e^13.5_?¿ Routinier

    Dabei seit:
    21.02.2006
    Beiträge:
    453
    Zustimmungen:
    0
    Da du ja C lernen willst, kannst du jetzt ja eine Funktion schreiben, die dir das vereinfacht ;)
     
  8. Xanti

    Xanti Mouse Organist

    Dabei seit:
    05.09.2004
    Beiträge:
    1.855
    Zustimmungen:
    0
    Code:
    ... 49 - 1 + 1 ...
    ähm...:think:
     
  9. #8 Lord Kefir, 09.05.2006
    Lord Kefir

    Lord Kefir König

    Dabei seit:
    10.06.2004
    Beiträge:
    944
    Zustimmungen:
    0
    Ersetze das '%e' durch ein '%d' und alles ist gut :)

    Mfg, Lord Kefir
     
  10. #9 MrFenix, 09.05.2006
    MrFenix

    MrFenix Executor

    Dabei seit:
    16.10.2004
    Beiträge:
    480
    Zustimmungen:
    0
    Ort:
    Siegen, NRW
    hätte auch geholfen.
     
  11. #10 Nemesis, 10.05.2006
    Zuletzt bearbeitet: 10.05.2006
    Nemesis

    Nemesis N3RD

    Dabei seit:
    28.01.2005
    Beiträge:
    2.165
    Zustimmungen:
    0
    einfach nur ein buchstabe falsch, und jetzt tuts *freut-sich-wie-ein-schneekönig*

    thx :)

    edit:

    so, jetzt hab ich es noch in eine etwas anschaulichere version gebracht:

    Code:
    # include <time.h>
    # include <stdio.h>
    # include <stdlib.h>
    
    int main (void)
            {
                    srand(time(NULL));
                    int j, i, x;
                    printf("Bitte die Anzahl der gewünschten Reihen angeben: ");
                    	scanf("%d", &x);
                    for (j = 1; j < (x+1); j++)
                    	{
                    		for (i = 1; i < 7; i++)
                            	{
                                    if (i < 6)
                                    	if (i == 1)
                                    		printf("%d. Reihe: %d;", j, (rand()%49));
                                    	else
                                    		printf(" %d;", (rand()%49));
                                    else
                                    	printf(" %d\n", (rand()%49));
                            	}
                    	}
                    return 0;
            }
    
    
    gibt es nun auch einen weg, dass er mir keine zahlen in einer reihe doppelt ausgiebt, ohne dass ich die zahlen in einer variablen abspeichere und dann die variablen vergleichen lasse?

    thx
     
  12. #11 Lord Kefir, 10.05.2006
    Lord Kefir

    Lord Kefir König

    Dabei seit:
    10.06.2004
    Beiträge:
    944
    Zustimmungen:
    0
    Nicht das ich wüsste.

    Mfg, Lord Kefir
     
  13. MTS

    MTS Kaiser

    Dabei seit:
    09.11.2002
    Beiträge:
    1.242
    Zustimmungen:
    0
    Ort:
    NRW, Bochum
    Du kannst dir ja nen Array mit allen Zahlen von 1 bis 49 erstellen ...
    und dann den Index als Zufallszahl berechnen lassen .. die entsprechende Zahl ausgeben,
    diese Zahl aus dem Array löschen (evtl. gleich ne Liste nehmen ...)
    und das ganze spiel nochmal, nur das die Zahl der Indizes jetzt eins weniger ist ...

    Bestimmt ziemlich ineffizient ... aber gut um zu lernen oder so ;-)
     
  14. #13 MrFenix, 10.05.2006
    MrFenix

    MrFenix Executor

    Dabei seit:
    16.10.2004
    Beiträge:
    480
    Zustimmungen:
    0
    Ort:
    Siegen, NRW
  15. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  16. karru

    karru OSX'ler

    Dabei seit:
    02.05.2006
    Beiträge:
    338
    Zustimmungen:
    0
    Wie wär es mit Folgendem?
    Code:
    bool zahlen[49];
    :devil:

    Gruß Karru

    (ps: Auch wenn sich das kleinlich anhört, es schreibt sich "gibt" nicht "giebt".)
     
  17. rikola

    rikola Foren Gott

    Dabei seit:
    23.08.2005
    Beiträge:
    2.133
    Zustimmungen:
    0
    Ein effizienterer Weg ist es, das Array zu erzeugen und dann in einer weiteren Schleife den Index der Laufvariable mit einer Zufallszahl 0<=r<49 zu vertauschen. Danach nimmt man die ersten k Zahlen des arrays, die dann gut durchmischt sein sollten.
     
Thema: zufallszahlen erstellen
Besucher kamen mit folgenden Suchen
  1. linux konsole passwort zufallszahlen erzeugen

    ,
  2. c zufallszahl Indices

Die Seite wird geladen...

zufallszahlen erstellen - Ähnliche Themen

  1. 16bit-Wavedatei als Hilfestellung für Zufallszahlen

    16bit-Wavedatei als Hilfestellung für Zufallszahlen: Hallo, kennt einer ein Programm, welches man nutzen kann um aus einer Wave-Datei byte-weise etwas herauszulesen? Habe das im Video...
  2. Systemaufruf für Zufallszahlen vorgeschlagen

    Systemaufruf für Zufallszahlen vorgeschlagen: Einem Wunsch der Entwickler von LibreSSL nachkommend hat Linux-Veteran Theodore »Ted« Ts'o einen neuen Systemaufruf vorgeschlagen, der eine Reihe...
  3. GMP: Zufallszahlen

    GMP: Zufallszahlen: Hallo, beschäftige mich gerade mit der GMP-Library, speziell Zufallszahlen. Mir ist noch nicht ganz klar, warum man gmp_randseed() braucht bzw....
  4. Zufallszahlen

    Zufallszahlen: Hallo, ich suche nach einem Algorithmus in c oder mono-c#, der aus Zufallszahlen (zwischen 0 und 255) Werte zurück gibt von denen ich dann...
  5. Zufallszahlen

    Zufallszahlen: Hallo, Ich bin neu hier.Also, ich möchte ein Programm zur Monte-Carlo-Berechnung von pi schreiben und benötige dazu Zufallszahlen. Allerdings...