2017-04-06 5 views
0

Dieses Programm soll eine Simulation ausführen, um zu sehen, ob eine Zahl, die der Benutzer eingegeben hat, weniger als drei zufällig generierte Zahlen ist. Alle Zahlen liegen zwischen 0 und 1. Der Benutzer gibt die Anzahl der Versuche für die Ausführung der Simulation an, und dann teilt das Programm dem Benutzer mit, wie oft alle drei Zahlen kleiner waren als ihre und wie oft es nicht war. Das Problem ist, dass ich jedes Mal, wenn ich das Programm laufe, immer 1 oder 1 Fehler erhalte, unabhängig davon, wie viele Versuche ausgeführt werden sollten. Ich denke, das liegt daran, dass ich nur einen Satz von Zufallszahlen erzeuge, anstatt wie oft angegeben, aber ich bin mir nicht sicher, wie ich das beheben soll.Generieren von mehreren Zufallszahlen in einer Schleife in C

hier ist der Code -

int main() 
{ 
int seed, trials, pass1, fail1, i, j, k; 
float reli; 

printf("Enter individual component reliability:\n"); 
scanf("%f", &reli); 

printf("Enter number of trials:\n"); 
scanf("%u", &trials); 



srand(time(NULL)); 
float rndm1 = (double)rand()/(double)RAND_MAX; 
float rndm2 = (double)rand()/(double)RAND_MAX; 
float rndm3 = (double)rand()/(double)RAND_MAX; 

while(k <= trials); { 
    pass1 = 0; 
    fail1 = 0; 
    if (rndm1 <= reli && rndm2 <= reli && rndm3 <= reli){ 
     pass1 = pass1 + 1; 
    } 
    else { 
    fail1 = fail1 + 1; 
} 

k++; 
} 
printf("# of passes = %d, #of failures = %d", pass1, fail1); 
} 

Dank

+0

'scanf ("% u", & Studien);' -> 'scanf ("% d" , & Versuche); ' –

+0

Wenn Sie eine lokale nichtstatische Variable definieren (wie zum Beispiel Ihre Variable' k'), wird sie nicht automatisch initialisiert. Es wird einen * unbestimmten * Wert haben. Die Verwendung ohne Initialisierung könnte zu * undefiniertem Verhalten * führen. –

+0

Sie müssen die Rndm1, Rndm2, Rnd3 und Aufrufe an Rand() innerhalb der While-Schleife verschieben. Sie müssen für jeden Versuch neue Zufallszahlen generieren (ich vermute das). –

Antwort

2

4 Dinge, die ich denke, sind das Problem:

Als Ajay sagte: Sie erzeugen nur 1 Satz von Zahlen und es scheint, Sie wollen um jedes Mal ein anderes Set zu bekommen. Also sollten Sie es in die Schleife verschieben.

Dann setzen Sie Ihre Pass- und Fail-Werte jedes Mal zurück, wenn Sie die Schleife durchlaufen. Es beginnt also jedes Mal wieder mit 0. Möglicherweise möchten Sie die Deklaration aus der Schleife verschieben.

Dritte Sache ist, Sie haben keine Schleife. while(k <= trials); bedeutet, dass es nichts zu tun gibt. Weil das Ende der Schleife bei ; ist. Sie müssen es entfernen.

Dann wieder wie StoryTeller erwähnt, Sie müssen die Variablen vor der Verwendung initialisieren. Es ist einfach pures Glück, dass man nicht in eine Endlosschleife lief so k=0; tun, bevor Sie k verwenden

int main() 
{ 
int seed, trials, pass1, fail1, i, j, k; 
float reli; 
float rndm1; 
float rndm2; 
float rndm3; 

printf("Enter individual component reliability:\n"); 
scanf("%f", &reli); 

printf("Enter number of trials:\n"); 
scanf("%u", &trials); 



srand(time(NULL)); 
pass1 = 0; 
fail1 = 0; 
k = 0; 

while(k < trials) 
{ 
    rndm1 = (float)rand()/RAND_MAX; //one cast is enough but casting both is not wrong and if you use float cast to float 
    rndm2 = (float)rand()/RAND_MAX; 
    rndm3 = (float)rand()/RAND_MAX; 

    if (rndm1 <= reli && rndm2 <= reli && rndm3 <= reli) 
    { 
     pass1 = pass1 + 1; 
    } 
    else 
    { 
     fail1 = fail1 + 1; 
    } 
    k++; 
} 
printf("# of passes = %d, #of failures = %d", pass1, fail1); 
} 
Verwandte Themen