PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : zufallszahlen



kappos
06-04-2006, 15:02
Irgendwie versteh ich mein Programm nicht....
ich habe mir eine Klasse geschrieben die mir
eine beliebige länge von zufallszahlen generiert....


class chrom
{
static const int chromlaenge=8;
int chromosom[chromlaenge];
public:
chrom(void);
void initchrom(void);
void getchrom(void);

public:
~chrom(void);
};

chrom::chrom(void)
{

}

chrom::~chrom(void)
{
}

void chrom::initchrom(void)
{
srand(time(NULL));

for (int x=0;x<chromlaenge;x++)
{



chromosom[x]=rand()%2;
}

}

void chrom::getchrom(void)
{
for (int x=0;x<chromlaenge;x++)
cout << chromosom[x];
}



wenn ich diese klasse jetzt aufrufe:


int _tmain(int argc, _TCHAR* argv[])
{
for (int x=0;x<3;x++)
{
chrom *a=new chrom;
a->initchrom();
a->getchrom();
cout << endl;
}
chrom b;
b.initchrom();
b.getchrom();

return 0;

}


kommen immer die gleichen paare raus. wieso?

Caveman
06-04-2006, 16:00
Da es ein kurzes Programm ist, ändert sich die Zeit während des Ablaufs nicht.
Somit initialisierst Du deinen Zufallsgenerator jedesmal mit dem selben Wert.

Du solltest diese Initialisierung deshalb nur einmal durchführen.

L00NIX
06-04-2006, 16:08
Du solltest diese Initialisierung deshalb nur einmal durchführen.

Anm.: Also schiebe sie in den Konstruktor!

Der Destruktor darf soweit ich weiß auch nicht void als Parameter haben, also ~chrom(). Erzeugt das keine Warnung des Compilers?

Gruß
L00NIX

kappos
06-04-2006, 16:26
Auf die Idee bin ich auch schon gekommen es in den Konstruktor zu verschieben aber es hilft nichts..... immer noch das gleiche Problem....

Nein der Compiler meldet keine Fehlermeldung. Laut Ansi Standart muss es doch glaub ~chrom(void) heißen oder?

Caveman
06-04-2006, 17:31
Wenn Du es in den Konstruktor schiebst, dann ändert sich auch nichts.
Es wird ja immer noch 6 Mal aufgerufen. Es muss in main.

kappos
06-04-2006, 18:53
Danke jetzt funktionierst es.
Danke für die rasche antwort.

mich würde es aber trotzdem interessieren warum mein ansatz nicht funktioniert hat? also es liegt an der systemzeit bzw weil mein prozess
zu schnell ist oder?
Gruss Felix

Caveman
06-04-2006, 20:03
Die Zeit wird in Sekunden gemessen. Dein Programm dauert aber weniger als eine Sekunde. Da srand() im Konstruktor steht und Du diesen mehrmals aufrufst, wird der Zufallszahlengenerator immer mit dem selben Wert initialisiert.
Dieses mehrfache Aufrufen ist gar nicht nötig und bringt Dir zudem Schwierigkeiten, wie Du siehst.
Es reicht, wenn man srand() einmal im Programm aufruft. Danach werden munter Zufallszahlen generiert.

Das ganze ist deshalb notwendig, weil es für einen PC sehr schwierig ist zufällige Zahlen zu erzeugen. Deshalb hat man einen Algorithmus erschaffen. Wird dieser aber immer vom selben Punkt aus gestartet, wird dieser immer die selben Zahlen zurückgeben.