Dice Program
|
Note: You need to study these two programs for exams.
| C Dice Program | Equivalent Java Dice Program |
|---|---|
/* dice: Gather statistics about rolling
* two dice. A Monte Carlo simulation using
* the random number generator rand()
*/
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void initarray(int d[]);
void printarray(int d[]);
void printstar(int n);
void fancyprint(int d[]);
int roll(void);
int numrolls;
int main(void) {
int d[13]; /* 2-12 hold num of rolls */
int i; /* loop variable */
int starttime = time(NULL); /* clock time */
srand((long)starttime);
printf("Enter # of rolls ---> ");
scanf("%i", &numrolls); /* need & on var */
initarray(d);
printf("Total rolls: %1d\n\n", numrolls);
for (i = 0; i < numrolls; i++)
d[roll() + roll()]++;
printarray(d);
fancyprint(d);
printf("Elapsed time: %ld seconds\n",
time(NULL) - starttime);
return 0;
}
/* initarray: initialize statistic array */
void initarray(int d[]) {
int i;
for (i = 2; i < 13; i++)
d[i] = 0;
}
/* printarray: print each num of rolls */
void printarray(int d[]) {
int i;
double e[] = {0, 0,
1.0/36.0, 2.0/36.0, 3.0/36.0, 4.0/36.0,
5.0/36.0, 6.0/36.0, 5.0/36.0, 4.0/36.0,
3.0/36.0, 2.0/36.0, 1.0/36.0};
printf("Sum Times Frequency");
printf(" Exact Diff\n\n");
for (i = 2; i < 13; i++)
printf("%2d %7d %11.7f %10.7f %8.4f\n",
i,
d[i],
(double)d[i]/numrolls*100.0,
e[i]*100.0,
((double)(d[i]) -
e[i]*numrolls)/numrolls*100.0);
}
/* printstar: print n stars */
void printstar(int n) {
while (n > 0) {
printf("*");
n--;
}
}
/* fancyprint: print bar graph */
void fancyprint(int d[]) {
int i;
printf("\n");
for (i = 2; i < 13; i++) {
printf("Sum:%3d |", i);
printstar(300*d[i]/numrolls);
printf("\n");
}
printf("\n");
}
/* roll: simulate rolling a die */
int roll(void) {
return (int) (6.0*(rand()/(double)RAND_MAX)
+ 1.0);
}
|
/* Dice: Gather statistics about rolling
* two dice. A Monte Carlo simulation using
* the random number generator Math.random()
*/
import java.io.*;
public class Dice{
static java.text.DecimalFormat sixDigits =
new java.text.DecimalFormat("0.000000");
static int numRolls;
public static void main(String[] args)
throws IOException {
int[] d = new int[13];
long startTime = System.currentTimeMillis();
System.out.print("Enter # of rolls ---> ");
int ch;
numRolls = 0;
for (;;) {
ch = System.in.read();
if (!Character.isDigit((char)ch)) break;
numRolls = numRolls*10 + (ch - '0');
}
initArray(d);
System.out.println("Total rolls: " +
numRolls + "\n");
for (int i = 0; i < numRolls; i++)
d[roll() + roll()]++;
printArray(d);
fancyPrint(d);
System.out.println("Elapsed time (millis) " +
(System.currentTimeMillis() - startTime));
}
/* initArray: initialize statistic array */
static void initArray(int[] d) {
for (int i = 2; i < 13; i++)
d[i] = 0;
}
/* printArray: print each num of rolls */
static void printArray(int[] d) {
double[] e = {0, 0,
1.0/36.0, 2.0/36.0, 3.0/36.0, 4.0/36.0,
5.0/36.0, 6.0/36.0, 5.0/36.0, 4.0/36.0,
3.0/36.0, 2.0/36.0, 1.0/36.0};
System.out.println("Sum \tTimes \tFreq (%)" +
" \tExact (%) \tDiff\n\n");
for (int i = 2; i < 13; i++)
System.out.println(
i + " \t" +
d[i] + "\t" +
sixDigits.format((double)d[i] /
numRolls*100.0) + " \t" +
sixDigits.format(e[i]*100.0) + " \t" +
sixDigits.format(((double)d[i] -
e[i]*numRolls) / numRolls*100.0));
}
/* printStar: print n stars */
static void printStar(int n) {
while (n > 0) {
System.out.print("*");
n--;
}
}
/* fancyPrint: print bar graph */
static void fancyPrint(int[] d) {
System.out.print("\n");
for (int i = 2; i < 13; i++) {
System.out.print("Sum: ");
if (i < 10) System.out.print(" ");
System.out.print(i + " |");
printStar(300*d[i]/numRolls);
System.out.print("\n");
}
System.out.print("\n");
}
/* roll: simulate rolling a die */
static int roll() {
return (int) (6.0*Math.random()
+ 1.0);
}
}
|
| Common Output (more-or-less) | |
% java Dice Enter # of rolls ---> 1000000 Total rolls: 1000000 Sum Times Freq (%) Exact (%) Diff 2 27869 2.786900 2.777778 0.009122 3 55791 5.579100 5.555556 0.023544 4 83005 8.300500 8.333333 -0.032833 5 111011 11.101100 11.111111 -0.010011 6 138791 13.879100 13.888889 -0.009789 7 166755 16.675500 16.666667 0.008833 8 139048 13.904800 13.888889 0.015911 9 110890 11.089000 11.111111 -0.022111 10 83280 8.328000 8.333333 -0.005333 11 55980 5.598000 5.555556 0.042444 12 27580 2.758000 2.777778 -0.019778 Sum: 2 |******** Sum: 3 |**************** Sum: 4 |************************ Sum: 5 |********************************* Sum: 6 |***************************************** Sum: 7 |************************************************** Sum: 8 |***************************************** Sum: 9 |********************************* Sum: 10 |************************ Sum: 11 |**************** Sum: 12 |******** Elapsed time (millis) 11490 | |