www.mikrocontroller.net

Forum: PC-Programmierung c Befehl srand in c#


Autor: Dimä (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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:
double d[10] = {0};

for (int i = 0; i <= 9; i++)
{
    srand(i);

    d[i] = (double)rand() / (double)RAND_MAX;
}


C#-Code:
int RAND_MAX = 32767; //RAND_MAX gibt es nicht in C#

double[] d = new double[10];

Random rnd = new Random();

for (int i = 0; i <= 9; i++)
{
    d[i]= (double)rnd.Next(i, RAND_MAX) / (double)(RAND_MAX);
}


MfG Dimä

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
in C# gehört Zufall zu Konzept!

Autor: bluppdidupp (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Den Seed kann man im Konstruktor angeben.

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

Autor: Timmo H. (masterfx)
Datum:

Bewertung
0 lesenswert
nicht 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.
srand( time(NULL) );  
Damit mischt du den Stapel.
Damit holst du dir die Zahl:
zahl=rand();

Autor: Winfried Speidel (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.