0

I have an assignment that simulates a dice game. As part of the program, the user enters the number of dice to roll and the number of times to roll them. If the user rolls 4 dice, the program should sum the 4 values, store the result in an array, then redo the program the number times defined by the user. The main code and the function prototypes were defined by our tutor and cannot be amended. We have to write the function.

In Step 3 of the main, there are two for loops. The inner for loop calls the function in question. A 2D array rollSums[][] is assigned to the result of the function. This array is to be used in another function. I can't figure out how to populate the 2D array correctly from the function. The code and my attempt at the function is below:

#include <iostream>
#include <iomanip>
#include <cstdlib> // needed for functions srand() and rand()
#include <ctime> // needed for function time()
#include <cmath> // needed for sqrt()

using namespace std;

const int MAXNUMTOROLL=10;
const int MAXROLLS=100;


int rollDice(int diceVals[], int numToRoll);

int main()
{
  int sum;
  int rollSums[MAXNUMTOROLL][MAXROLLS];
  int diceVals[MAXROLLS];
  double mean[MAXNUMTOROLL], std[MAXNUMTOROLL];
  int numToRoll, numRolls;

  srand(time(NULL));

  // STEP 1: Ask user to input the maximum number of dice to use:

  cout << "Please enter the maximum number of dice to use:" << endl;
  do 
    {
      cin >> numToRoll;
    } while (numToRoll < 0 || numToRoll > MAXNUMTOROLL); 

  cout << "Please enter the number of rolls:" << endl;

  // STEP 2: Ask user to input the number of rolls to carry out:
  do
    {
      cin >> numRolls;
    } while (numRolls < 0 || numRolls > MAXROLLS);

  // STEP 3: For k=1 to numToRoll, simulated numRolls rolls of the dice
  // and store the sum of the numbers rolled in the array rollSums[][]

  for (int k=1;k<=numToRoll;k++)
    {
      for (int i=0;i<numRolls;i++)
    {
      rollSums[k-1][i] = rollDice(diceVals, k);
    }
    }

  return 0;
}

int rollDice(int diceVals[], int numToRoll) //function simulating throwing of dice
{
 int sum=0;
 int i=0;

 for(i=0;i<numToRoll;i++)
 {
  diceVals[i]=1+rand()%6;
  sum=sum+diceVals[i];
 }
 return sum;
}
4
  • Do you have an example of expected output? Your step 3 loop rolls each die individually. So when k = 1 you will roll die 1 numRolls times. When k = 2 you will do the same for die 2. Then you are also passing the value of k to the rollDice function. My understanding is if the user wants to roll 4 dice then you roll all 4 together and store that sum. But that's not what your code does. Can you clarify please? Commented Mar 28, 2012 at 17:16
  • @Pete If I rolled 2 dice 3 times I should have an output like: No of Dice rolled: 1 2 Roll 1: 4 8 Roll 2: 3 9 Roll 3: 4 10 Commented Mar 28, 2012 at 19:22
  • Sorry if I'm being a little dense but I still don't follow. Best of luck to you! Commented Mar 29, 2012 at 1:37
  • @Pete sorry my comment didn't display as I had intended it to but the answer given below answered my question. Thanks anyway! Commented Apr 2, 2012 at 13:19

1 Answer 1

2

adohertyd, see my comments in the code sample:

#include <iostream>
#include <iomanip>
#include <cstdlib> // needed for functions srand() and rand()
#include <ctime> // needed for function time()
#include <cmath> // needed for sqrt()

using namespace std;

const int MAXNUMTOROLL=10;
const int MAXROLLS=100;
const bool show_debug = true;

int rollDice(int diceVals[], int numToRoll);

int main()
{
    int roll_Sums[MAXNUMTOROLL];
    int diceVals[MAXROLLS];
    //double mean[MAXNUMTOROLL], std[MAXNUMTOROLL];
    int numDice, numThrows;

    //Initialize random number generator with the current time
    srand(time(NULL));

    // STEP 1: Ask user to input the maximum number of dice to use:
    cout << "Please enter the maximum number of dice to use:" << endl;

    // STEP 2: Validate number of dice input
    do 
    {
        cin >> numDice;
    } while (numDice < 0 || numDice > MAXNUMTOROLL); 

    //STEP 3: Ask user to input the number of times to throw each dice
    cout << "Please enter the number of rolls:" << endl;

    // STEP 4: Validate number of throws input
    do
    {
        cin >> numThrows;
    } while (numThrows < 0 || numThrows > MAXROLLS);

    cout << "\n\nThrowing Dice Now...\n\n";

    // STEP 5: Roll the dice
    //The loop deals with each dice
    for (int diceCount = 0; diceCount < numDice; diceCount++)
    {
        //The function call deals with all the throws per dice
        //Note: roll_Sums array didn't need to be two dimensional, 
        //      also, rollDice gets passed diceVals[] by value and the number of throws to execute
        roll_Sums[diceCount] = rollDice(diceVals, numThrows);

        //Debug output
        if(show_debug)
        {
            //Since roll_Sums is zero based, add one to the visible index so the user doesn't get confused :P
            cout << "Roll Sum for dice #" << diceCount + 1 << ": " << roll_Sums[diceCount] << endl << endl;
        }      
    }

    return 0;
}

//rollDice() returns the sum of all the dice rolls it performed 
int rollDice(int diceVals[], int numToRoll)
{
    int sum=0;

    for(int i=0;i<numToRoll;i++)
    {
        //Get your random dice rolls
        diceVals[i]=1+rand()%6;

        //Debug output
        if(show_debug)
        {
            cout << "Dice Roll # " << i+1 << ": " << diceVals[i] << endl; 
        }

        //Accumulate your value, e.g. "sum"
        sum += diceVals[i];
    }

    return sum;
}
Sign up to request clarification or add additional context in comments.

2 Comments

That's what I was looking for. The 2-D array being obtained from the first function was throwing me completely. Thanks for that input
@adohertyd, yeah I was looking at your question at 1am in the morning and my personal opinion is that your tutor/teacher worded the exercise very poorly as it was very confusing. Glad it helped! Cheers!

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.