Forum: PC-Programmierung c Befehl srand in c#


von Dimä (Gast)


Lesenswert?

Hallo Leute,

ich versuche z.Zt. ein altes C-Konsolenprogramm in C# mit graphischer 
Obefläche neu zu schreiben.

Mein Problem sind die Befehle srand, rand und RAND_MAX dabei in C# 
umzusetzen. Das .Net 2.0 Framework bietet hierfür Random an.

Irgendwie generiert C# mir immer andere Werte und das alte C-Programm 
immer die gleichen! Ich weiß leider nicht mehr weiter, vielleicht kann 
mir jemand helfen.


C-Code:
1
double d[10] = {0};
2
3
for (int i = 0; i <= 9; i++)
4
{
5
    srand(i);
6
7
    d[i] = (double)rand() / (double)RAND_MAX;
8
}


C#-Code:
1
int RAND_MAX = 32767; //RAND_MAX gibt es nicht in C#
2
3
double[] d = new double[10];
4
5
Random rnd = new Random();
6
7
for (int i = 0; i <= 9; i++)
8
{
9
    d[i]= (double)rnd.Next(i, RAND_MAX) / (double)(RAND_MAX);
10
}


MfG Dimä

von Gast (Gast)


Lesenswert?

in C# gehört Zufall zu Konzept!

von bluppdidupp (Gast)


Lesenswert?

Den Seed kann man im Konstruktor angeben.

(Auch wenn man normalerweise eigentlich gerade nicht immer "dieselben 
Zufallswerte" haben möchte. Sehr seltsam ;D)

von Timmo H. (masterfx)


Lesenswert?

Ja C liefert immer die selben Zahlen, ist halt nur pseudo-zufällig. Kann 
man sich so vorstellen, dass C immer den gleichen Kartenstapel hat und 
auch immer die gleichen Karten abhebt. Darum sollte man vorher den 
Kartenstapel neu mischen, dafür ist die Funktion srand.
1
srand( time(NULL) );
Damit mischt du den Stapel.
Damit holst du dir die Zahl:
1
zahl=rand();

von Winfried Speidel (Gast)


Lesenswert?

Hallo,
eine kleine Ergaenzung zum C-Code - die srand(time(0)); Anweisung muss 
natuerlich ausserhalb deiner Schleife stehen, da du sonst immer 
denselben Wert erhaeltst.
Gruss Winfried

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.