zufalls zahlen

Schnelle objektorientierte, kompilierende Programmiersprache.
Antworten
G_loW
Beiträge: 29
Registriert: Mi Jan 14, 2009 10:05 pm

zufalls zahlen

Beitrag von G_loW » Do Feb 12, 2009 8:20 pm

hi leute,

weis wer was die einfachste form ist zufallszahlen zwichen 1 und 20 zu generieren? (ohne nachkommastelle) :?:

mfg G_loW :ugeek:
use Linux
use Code::Blocks

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3125
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: zufalls zahlen

Beitrag von cloidnerux » Do Feb 12, 2009 8:27 pm

Code: Alles auswählen

#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <time.h>

void main()
{time_t start; //Speichert aktuelle Zeit als int
srand(start); //legt Startwert für Randombefehl fest
int wert = (rand() % 100)+1; //wert zw.1 u 100
}
Es ist die Funktion rand().
Alles davor sorgt nur dafür das alles seine Richtigkeit hat.
Es wird die Aktuelle zeit Abgefragt und als Startwert für dei Zufalszahlen verwendet.
So wird verhindert, das bei jedem start die selben Zufallszahlen kommen.
Redundanz macht wiederholen unnötig.
quod erat expectandum

Benutzeravatar
Dubbel
Beiträge: 197
Registriert: So Jul 06, 2008 6:25 pm
Wohnort: Kopenhagen
Kontaktdaten:

Re: zufalls zahlen

Beitrag von Dubbel » Do Feb 12, 2009 8:34 pm

Code: Alles auswählen

srand (time(0));
int zahl;
zahl=rand()%19;
zahl++;
srand(time(0)); sagt dem Computer, dass er sich die Zufallszahl anhand der Zeit ausdenken soll, da Computer ja nicht kreativ sind, also einen Bezugspunkt für die Errechnung des Zufallswertes haben müssen.
rand()%19; erzeugt eine zufällige Zahl zwischen 0 und 19. Nun rechnet man diese +1, da du ja eine Zwischen 1 und 20 haben wolltest.
Würden wir rand()%20; schreiben, dann wäre die Zufallszahl zwischen 0 und 20, deshalb das +1.

Jedenfalls hab ich das immer so gemacht (in C bin ich ja eher nicht so der Profi ^^)

Edit1: Achja: Du musst die time.h einbinden ( #include <time.h> )
Edit2: Jetzt war cloidnerux schneller - egal ^^
Edit3: Mich wundert es, dass das nicht im Wiki steht (habs jedenfalls nicht gefunden).

G_loW
Beiträge: 29
Registriert: Mi Jan 14, 2009 10:05 pm

Re: zufalls zahlen

Beitrag von G_loW » Do Feb 12, 2009 8:41 pm

danke für dei schnelle antwort :mrgreen:
hat mir sehr geholfen
use Linux
use Code::Blocks

Benutzeravatar
Kerli
Beiträge: 1456
Registriert: So Jul 06, 2008 10:17 am
Wohnort: Österreich
Kontaktdaten:

Re: zufalls zahlen

Beitrag von Kerli » Fr Feb 13, 2009 4:31 am

Dubbel hat geschrieben: rand()%19; erzeugt eine zufällige Zahl zwischen 0 und 19.
Nein, hier muss man aufpassen. Der Modulooperator liefert den Rest der Ganzzahldivision der linken durch die rechte Zahl. Wenn wir jetzt also durch 19 dividieren dann kann der ganzzahlige Rest natürlich maximal 18 sein, da sich eine Division durch 19 genau ausgeht und deshalb auch 0 Rest bleibt.

Für eine Zufallszahl zwischen 1 und 20 müsste man also folgenden Code verwenden:

Code: Alles auswählen

rand() % 20 + 1;
Das in den vorigen Posts erwähnet 'srand' musst du nicht jedes mal aufrufen, da es nur dazu dient den internen Zufallszahlengenerator mit einem gewissen Startwert zu initialisieren.
Dubbel hat geschrieben:Edit3: Mich wundert es, dass das nicht im Wiki steht (habs jedenfalls nicht gefunden).
Stimmt. Ich habs mir einmal in die Howto-Liste geschrieben.
"Make it idiot-proof and someone will invent an even better idiot." (programmers wisdom)

OpenGL Tutorials und vieles mehr rund ums Programmieren: http://www.tomprogs.at

Antworten