it sounds to me that you are looking to compare theoretical probability against an observed probability of a data set for a given theoretical likelihood. statistics isn't one of my natural strong points, but i recently completed a project on error correcting codes, and as an added feature, i used a concept similar to the one employed in the code below, to determine the characteristics of the decoder when the message had a specific number of errors. without getting all technical, what i had was a large number of messages. i used the encoding algorithm specified to produce the codewords, and then i randomly corrupted a specific number of bits in the codeword. i then proceeded to attempt to decode the original message, and i logged the success rate of the system in that manner. the aim of all this was to experimentally determine the theoretical accuracy of the system when a specific number of bits were corrupted.
how does this apply here? well the way i see it, you are asking a user to specify a probability of creating a creature. every compiler has the ability to generate pseudo-random numbers, and we'll assume that this is suitable for this current problem. on my system, rand is capable of generating any integer between 0 and RAND_MAX, which in my case is 32767. what the code below does is that it takes in a probability, and divides the range of possible values accordingly. so basically, if i enter in a probability of 0.66 recurring (two thirds), it will set an interval at 21844 - a value two thirds of the maximum possible value. now since we have a capable random number generator, which we assume is even and unbiassed, the direct probability of it generating a number in the range 0 - 21843 is (nearly) twice the probability of it producing a number in the range 21844 to 32767 see?
so basically, the code does that, then produces a data set by contiuously calling the rand function and observing which side of the interval these values lie. these details are written into a log file. the number of calls to rand will depend on how many seconds you decide to run the program for.
i think that although i am probably removing most of the hard work, you should have an idea of how it works. hopefully i have understood the requirements of your questions -this program doesnt quite satisfy all of them, just the underlying theory.
there's still work left to do with this program - it doesn't print any statistics to the screen, and also due to the nature of the loop it uses - it produces loads of values. i ran it for 2 seconds and produced a million samples. also, the nature of the timing is not exact, because it is assumed that it doesnt matter too much. i don't normally write full programs to this degree, but i had some time to kill and it was fun - barring one missing semi-colon and an invalid int declaration the code worked fine! i hope that this will at least give you some idea of tackling your problem if i havent addressed it as required.
int main ()
int created = 0;
int total = 0;
srand (time(0)); /*seeds the randome number generator so that
rand returns "good" random values*/
printf ("Enter a numerator: ");
scanf ("%f", &numerator);
printf ("\nEnter a denominator: ");
scanf ("%f", &denominator);
printf ("\nThe probability is %f\n\n", numerator/denominator);
/*This following line sets the interval point*/
interval = (int)((numerator/denominator)*RAND_MAX);
printf ("This probability sets an interval at %d\n\n", interval);
printf ("Enter how long you wish to run the program: ");
scanf ("%d", &end);
if ((fp = fopen ("log.txt", "w")) == NULL)
printf ("\nError: Unable to open file");
end = end + time (0);
while (time (0) < end) /*this loop writes all data to file*/
sample = rand ();
fprintf (fp, "Trial: %d\t", total);
if (sample < interval)
fprintf (fp, "Created\n\n");
created++; /*so you will know how many were created*/
fprintf (fp, "Not Created\n\n");
total++; /*so you have the total number of samples*/