L'intention ici est d'écrire un code C pour un simulateur de roulage à 2 dés. Il doit écrire la réponse sous forme d'histogramme (10 résultats par ligne). Calculer et donner le minimum, le maximum et la moyenne des jets de dés. Ainsi que les doublons. Je dois admettre que je suis coincé en ce moment. Toute aide serait appréciée.C - Simulateur de roulage de dés
Voici le code:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 100
void initarray(int d[]);
void printarray(int d[]);
void printstar(int n);
void fancyprint(int d[]);
int roll(void);
int main(int argc, char* argv[]) {
{
int roll();
int d[13]; /* 2-12 hold num of rolls */
int i; /* variable de la boucle */
int starttime = time(NULL); /* temps horloge*/
srand(1020);
printf("Simulation de 100 lancees de 2 des");
for (i = 0; i < N; 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]/N*100.0,
e[i]*100.0,
((double)(d[i]) -
e[i]*N)/N*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]/N);
printf("\n");
}
printf("\n");
}
/* roll: simulate rolling a die */
int roll() {
return (int) (6.0*(rand()/(double)RAND_MAX)
+ 1.0);
return 0;
}
}
Merci, je vais essayer ça. – mmmtv
Le '+ 1.0' devrait probablement être' + 1' après le cast –
@MM Pourrait faire cela, Encore mieux est '((double) (RAND_MAX/2 + 1) * 2.0)' car 'RAND_MAX' est certainement un pouvoir -of-2 - 1' et la conversion de 'RAND_MAX/2 + 1' en' double' sera certainement exacte. Plus encore, je signalais à OP que faire tout cela sans FP est vraiment la meilleure voie à suivre. – chux