C Funktion in einer Schleife ausführen (Funktion wird nur 1 mal ausgeführt)

M

maxpain

Es handelt sich um eine Funktion die Zufallszahlen erzeugt. Nun möchte ich diese Funktion mehrmals ausführen damit X verschiedene Zahlen erzeugt werden, das X steht für die Anzahl der zu erzeugenden Zahlen. Nun ist es aber das ich, wenn ich die Funktion in einem C programm, in einer Schleife ausführe, wird X mal das selbe Ergebniss angezeigt, wenn ich es jedoch im C++ Stil schreibe werden X verschiedene Zahlen erzeugt. Vielleicht hab ich auch nur was übersehen, kann mir trozdem jemand einen Tipp geben warum es so ist wie es im moment ist?

Hier der Code:

In C wo X mal die selbe Zahl ausgegeben wird
Code:
/*
 *  ZUFALL.C
 *
 *
 */

 #include <cstdio>
 #include <ctime>
 #include <cstdlib>

 short zufall(short, short, double);
 short zufall(short min, short max, double delay)
 {
   short z_zahl = 0u;
   time_t start, stop;
   
   time(&start);
   do
   {
    time(&stop);
   }while(difftime(stop, start) < delay);

   srand((unsigned) time(NULL));
   do               
   {
    z_zahl = rand();
   }while((z_zahl<min)||(z_zahl>max));
  
   return z_zahl;
 }

 int main(int argc, char** argv)
 {
  short min = 0u, max = 0u, i = 0u;
  double verz = 0.0l;
  
  printf("Zufallszahlengenerator\n");

  printf("Minimale Zufallszahl Bereichszahl eingeben: ");
  scanf("%u", &min);

  printf("Maximale Zufallszahl Bereichszahl eingeben: ");
  scanf("%u", &max);

  printf("Verzoegerung eingeben: ");
  scanf("%.2f", &verz);

  for(short i = 0; i < 7; i++)
   printf("%u\n", zufall(min, max, verz));

  system("pause");

  return 0;
 }

Das selbe Programm in C++, nur hier werden X verschiedene Zahlen ausgegeben
Code:
/*
 *  ZUFALL.CPP
 *
 *
 */
 
 #include <iostream>
 #include <ctime>
 #include <cstdlib>
 
 using namespace std;

 short zufall(short, short, double);
 short zufall(short min, short max, double delay)
 {
   short z_zahl = 0u;
   time_t start, stop;
   
   time(&start);
   do
   {
    time(&stop);
   }while(difftime(stop, start) < delay);

   srand((unsigned) time(NULL));
   do               
   {
    z_zahl = rand();
   }while((z_zahl<min)||(z_zahl>max));
  
   return z_zahl;
 }

 int main(int argc, char* argv[])
 {
  short min = 0u, max = 0u, i = 0u;
  double verz = 0.0l;
  
  cout << "Zufallszahlengenerator" << endl;

  cout << "Minimale Zufallszahl Bereichszahl eingeben: ";
  cin >> min;

  cout << "Maximale Zufallszahl Bereichszahl eingeben: ";
  cin >> max;

  cout << "Verzoegerung eingeben: ";
  cin >> verz;

  for(short i = 0; i < 7; i++)
   cout << zufall(min, max, verz) << endl;

  system("pause");

  return 0;
 }
 
srand solltest Du nur einmal in Deinem Programm aufrufen, zum Beispiel innerhalb Deiner main. Gib doch mal das Ergebnis von srand und den Wert seines Argumentes bei jedem Durchlauf an. Optimierst Du? Vielleicht sorgt die Optimierung dafuer, dass immer wieder gleich initialisiert wird.

P.S.: Es gibt eine 'sleep' Funktion, die im Gegensatz zu Deiner Warte-Implementierung wohl keine CPU-Zeit verbrauchen duerfte.
 
Die Qualitaet der Zufallszahlen sind eigentlich unabhaengig vom Startwert, von daher ist es egal, ob der immer nur steigt. Dadurch werden die Zahlen nicht vorhersehbarer (sollten zumindest nicht, aber das geht wohl mehr in die Theorie der Zufallszahlengeneratoren).

sleep ist vermutlich kein Standard, das betriebssystemabhaengig. Auf Linux/ *BSD gib einfach mal 'man 3 sleep' ein.
 
for(short i = 0; i < 7; i++)

hm ich glaube in C darf man nicht in einer Schleife eine Variable definieren.
probiers mal:
schort i;
for (i=0;i<7;i++)
vll bringts was.
 
for(short i = 0; i < 7; i++)

hm ich glaube in C darf man nicht in einer Schleife eine Variable definieren.
probiers mal:
schort i;
for (i=0;i<7;i++)
vll bringts was.

Da meckert aber schon der Kompiler,d.h., es entsteht erst gar kein ausfuehrbares Programm.
 
versuch mal ein:
Code:
randomize();
am Anfang vom Programm!

Syntax weiß ich nicht mehr genau - kann sein daß du vielleicht noch irgendwas übergeben mußt.
 
for(short i = 0; i < 7; i++)

hm ich glaube in C darf man nicht in einer Schleife eine Variable definieren.
probiers mal:
schort i;
for (i=0;i<7;i++)
vll bringts was.

Da meckert aber schon der Kompiler,d.h., es entsteht erst gar kein ausfuehrbares Programm.
 

Ähnliche Themen

C Code Hilfe!!! gesucht bei Dezimalzahl in Binärzahl for loop

Aufgabe in C

[PHP] Autologin-Funktion

NagiosGrapher 1.7.1 funktioniert nicht

kann ich diesen c-code ausführen, wenn ja wie?

Zurück
Oben