/* -------------------------------------------------------------------------- // Figure 7.29: Generating random numbers. // -------------------------------------------------------------------------- // Generate and print a series of pseudo-random numbers. Count and print // the number of trials that were equal to 0. Also print the number that // was expected, based on probability */ #include "tools.h" #define HOW_MANY 500 /* Generate HOW_MANY random numbers */ #define NCOL 10 /* Number of columns in which to print the output. */ #define MAX 100 /* Upper limit on size of random numbers generated. */ void main( void ) { long num; /* a randomly-generated integer */ short select; /* input: the divisor to test */ short n; /* # of random numbers generated */ int count; /* # of zeros generated. */ banner(); srand( (unsigned) time( NULL ) ); /* seed random number generator */ printf( " Generate and print %i random numbers in the range 0..n-1.\n" " Please choose an n, between 2 and %i: ", HOW_MANY, MAX ); scanf( "%hi", &select ); if (select < 2 || select > MAX ) fatal( " Number is out of range." ); /* Generate random numbers and test for zeros. --------------------- */ count = 0; /* Count zeros generated. */ for (n = 0; n < HOW_MANY;){ /* Generate HOW_MANY random numbers. */ num = rand(); /* Generate a random long integer. */ num %= select; /* Scale to range 0..select-1. */ ++n; /* Count the trials and ... */ printf( "%5li", num); /* print all numbers generated and.. */ if (n % NCOL == 0) puts( "" ); /* end line every NCOL outputs. */ if (num == 0) ++count; /* Count the zeros. */ } if (n % NCOL != 0) printf( "\n" ); /* End last line of output. */ printf( "\n %5i zeros were generated.", count ); printf( "\n %7.1f are expected on average.\n", HOW_MANY/(float)select ); bye(); }