#pragma warning(disable:4996)
// INCLUDES
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
// DEFINES
#define LOWER_DIE 1 // LOWER_DIE must be at least 1
#define UPPER_DIE 10
#define TRIALS 10000
// PROTOTYPES
int genRand(int, int);
int getTwoDieSum(int, int);
// MAIN
int main( int total) {
int numberArray[2 * UPPER_DIE + 1] = { '0', '0', '0', '0', '0', '0', '0','0','0','0','0', '0', '0' };// holds frequency of rolls
int roll = total;
int i = 0;
srand((unsigned int)time(NULL));
for (i = 0; i < TRIALS; i++) {
getTwoDieSum( LOWER_DIE, UPPER_DIE);
numberArray[roll] == numberArray[roll] + 1;
}
printf("ROLL VALUE : FREQUENCY\n");
printf("2\t: %d\n", numberArray[2]);
printf("3\t: %d\n", numberArray[3]);
printf("4\t: %d\n", numberArray[4]);
printf("5\t: %d\n", numberArray[5]);
printf("6\t: %d\n", numberArray[6]);
printf("7\t: %d\n", numberArray[7]);
printf("8\t: %d\n", numberArray[8]);
printf("9\t: %d\n", numberArray[9]);
printf("10\t: %d\n", numberArray[10]);
printf("11\t: %d\n", numberArray[11]);
printf("12\t: %d\n", numberArray[12]);
return 0;
}
// FUNCTION IMPLEMENTATIONS
int genRand(int lower, int upper) {
int range = (upper - lower) + 1;
return rand() % range + lower;
}
int getTwoDieSum( int lower, int upper) {
int rollOne = 0;
int rollTwo = 0;
int total = 0;
rollOne = genRand(lower, upper);
rollTwo = genRand(lower, upper);
total = rollOne + rollTwo;
return total;
}
What I have so far, it is supposed to be generating random numbers and then populating the correct element of the array. Keeps outputting 48 for all the printf() statements. Any ideas where I am messing up? I think it is in genRand() area or getTwoDieSum(). I am required to use the following shell, I am not really sure what everything is supposed to be doing which is why I am messing up. Also I am not really sure where the int lower and int upper are coming from in:
int genRand(int lower, int upper) {
int range = (upper - lower) + 1;
return rand() % range + lower;
}
My question is more of where am I messing up and where is the int lower and int upper coming from and am I using the random seed generator correctly?
Shell required to be used:
// INCLUDES
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
// DEFINES
#define LOWER_DIE 1 // LOWER_DIE must be at least 1
#define UPPER_DIE 10
#define TRIALS 10000
// PROTOTYPES
int genRand(int, int);
int getTwoDieSum();
// MAIN
int main() {
int numberArray[2 * UPPER_DIE + 1]; // holds frequency of rolls
// initialize numberArray
// seed the random number generator
// roll the dice and keep track of what was rolled in the array
// display results
return 0;
}
// FUNCTION IMPLEMENTATIONS
int genRand(int lower, int upper) {
int range = (upper - lower) + 1;
return rand() % range + lower;
}
int getTwoDieSum() {
// YOUR IMPLEMENTATION GOES HERE
You can improve your code a little bit more. For example, the function that calculates the sum of the two rolls can be simplyfied:
int getTwoDieSum( int lower, int upper ) {
return genRand(lower, upper) + genRand(lower, upper);
}
Now, as getTwoDieSum
returns a value, just like genRand
, you'd better use it. Your main
function could look like this:
// MAIN
int main() {
// holds frequency of rolls
int numberArray[2 * UPPER_DIE + 1] = {0};
// The size of the array of frequency is set to 21, so that numberArray[20]
// represents the frequency of roll 10+10.
// The first two elements (numberArray[0] and numberArray[1]) are unused
int size = sizeof(numberArray) / sizeof(int);
int i;
// If an array is partially initialized, elements that are not initialized
// receive the value 0 of the appropriate type. Alternatively you can use:
//
// for ( i = 0; i < size; ++i ) {
// numberArray[i] = 0;
// }
//
// or simply
//
// memset(numberArray,0,size);
// seed the random number generator
srand(time(NULL));
// roll the dice and keep track of what was rolled in the array
int roll;
for (i = 0; i < TRIALS; i++) {
roll = getTwoDieSum( LOWER_DIE, UPPER_DIE);
++numberArray[roll];
}
// display results
printf("ROLL VALUE : FREQUENCY\n");
for (i = 2; i < size; i++) {
// numberArray[2] represent the frequency of roll 1+1,
// while numberArray[20] is the frequency of roll 10+10
printf("%d\t: %d\n", i, numberArray[i]);
// add ^^ the roll value
}
return 0;
}
A typical run give this output:
ROLL VALUE : FREQUENCY
2 : 99
3 : 179
4 : 273
5 : 390
6 : 513
7 : 587
8 : 678
9 : 777
10 : 902
11 : 1039
12 : 913
13 : 822
14 : 672
15 : 614
16 : 514
17 : 433
18 : 298
19 : 195
20 : 102