/* 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
", numrolls);
for (i = 0; i < numrolls; i++) d[roll() + roll()]++; printarray(d); fancyprint(d); printf("Elapsed time: %ld seconds
", 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
"); for (i = 2; i < 13; i++) printf("%2d %7d %11.7f %10.7f %8.4f
", 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("
"); for (i = 2; i < 13; i++) { printf("Sum:%3d |", i);
printstar(300*d[i]/numrolls); printf("
"); } printf("
"); }
/* 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 + "
"); 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 Times Freq (%)" + " Exact (%) Diff
"); for (int i = 2; i < 13; i++) System.out.println( i + " " + d[i] + " " + sixDigits.format((double)d[i] / numRolls*100.0) + " " + sixDigits.format(e[i]*100.0) + " " + 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("
"); 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("
"); } System.out.print("
"); }
/* roll: simulate rolling a die */ static int roll() { return (int) (6.0*Math.random() + 1.0); } }
|