[CoLoCo] dice rolls in C
Kevin Fries
kfries at cctus.com
Tue Feb 5 16:37:27 GMT 2008
Hopefully my comments will help you understand. Changing from 3 dice to
two is pretty trivial. Ask again if this explanation does not help you
figure it out on your own.
Kevin
#include <time.h> /* Needed just for srand seed */
#include <stdlib.h>
#include <stdio.h>
>> These are optional libraries and headers. Stdlib is included
>> in most programs, and stdio is included whenever you are outputing
>> direct from the program (i.e. no x)
const tenmillion = 1000000L;
/* #define tenmillion 10000000L */
>> This simply defines a constant value to use instead of a number
void Randomize() {
srand( (unsigned)time( NULL ) ) ;
}
>> This function calls the random number generator with the current time
>> in milliseconds as a seed to further randomize the value. The value
>> returned will be between 0 and 1.
int Random(int Max) {
return ( rand() % Max)+ 1;
}
>> This calls the last function and converts it to a number between 0
>> and 1 to a number between 1 and Max.
int main(int argc, char* argv[]) {
int i;
>> This is just a counter variable being declared for future use
int totals[19];
>> This will hold a counter of how many times the three rolls total
>> a certain value. Three dice x six sides = 18 values, not sure why
>> they made it 19. Think about it, 0, 1, and 2 are also impossible
>> values, so this could have been 15 since their are only 15 possible
>> values, but he made it 18 (19?) to make logic easier later.
printf("Rolling Ten Million Dice\n") ;
Randomize() ;
>> seed the random number generator
for (i=3;i<=18;i++)
totals[ i ]=0;
>> Make sure all legal values (3-18) start from zero
for (i=0;i< tenmillion;i++) {
>> loop 10 Million times
int d1=Random(6) ;
int d2=Random(6) ;
int d3=Random(6) ;
>> Get a random number from 1 to 6 for each of three die d1, d2, d3
int total=d1+d2+d3;
>> Get the total amount of the roll
totals[ total ]++;
>> Add 1 to the total counter. i.e. if you rolled 6, 3, 2 the total
>> will equal 11, so add one to total number 11. This creates what is
>> known as a histogram.
}
for (i=3;i<=18;i++) {
printf("%i %i\n\r",i,totals[ i ]) ;
}
>> Print the results in the form of "# total" for all legal values
>> (3-18)
return 0;
>> all functions in C return an integer value by default, so return
>> 0. Since this is the controlling function, the 0 will be returned
>> to the OS as the errorlevel. With error checking, you could have
>> returned a 1 on error, and checked this value in your bash script.
}
On Tue, 2008-02-05 at 09:08 -0700, Jim Hutchinson wrote:
> In my attempts to learn about RNGs and programming tools, I stumbled
> upon a little program apparently written in C. How do I compile or run
> this in Ubuntu? Anyone know how to change it from 3 dice to 2? It's
> mostly gibberish to me.
>
> http://cplus.about.com/od/thecden/a/dicerolls.htm
>
> Thanks,
> Jim
>
> --
> Please avoid sending me Word or PowerPoint attachments.
> See http://www.gnu.org/philosophy/no-word-attachments.html
>
--
Kevin Fries
Senior Linux Engineer
Computer and Communications Technology, Inc
A Division of Japan Communications Inc.
More information about the Ubuntu-us-co
mailing list