Bonjour J'ai écrit le code nécessaire pour une base de générateur roulant de dés sur rand() et time.h. Il demande essentiellement à l'utilisateur d'entrer le nombre de fois qu'il veut que les dés soient roulés, puis il les fait rouler X fois. Il enregistre les temps de chacun des numéros 1-6 dans un tableau et le pourcentage de chaque numéro dans un autre tableau.Histogramme de dés de roulement
Maintenant, ce que je veux faire est de créer un histogramme qui a les numéros 1-6 et - sur l'axe des X, les pourcentages et | sur l'axe Y et les étoiles (*) pour les colonnes.
Quelque chose comme ceci:
10% | *
8% |* * *
6% |* * * * *
4% |* * * * * *
2% |* * * * * *
+------------
1 2 3 4 5 6
J'ai une recherche google throught pour trouver quelque chose pour commencer, mais je l'ai vraiment trouvé quelque chose de semblable à mon cas les thats aide va commencer par moi.
Mon code ainsi pour est:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int random_number();
float calc_percentage(int totals, int nums);
float calc_maxper(float perc[6]);
float calc_minper(float perc[6]);
float permin;
float permax;
int main(void)
{
int nums;
int i;
int totals[6] = {0};
float percentages[6] = {0};
srand(time(NULL));
printf("How many numbers to generate?");
scanf("%d", &nums);
for (i = 1; i <= nums; i++)
{
int x = random_number();
totals[x-1]++;
}
for (i = 0; i<6; i++)
{
percentages[i] = calc_percentage(totals[i],nums);
printf("The percentage of each number is: %.2f%\n", percentages[i]);
}
permin = calc_minper(percentages);
permax = calc_maxper(percentages);
if (((permax) - (permin)) > 5)
printf("The generator is not good.\n");
printf("The percentage difference is:%.1f\n", permax-permin);
system("pause");
return 0;
}
int random_number()
{
int randnum;
randnum = 1 + (rand() % 6);
return randnum;
}
float calc_percentage(int totals, int numbers)
{
float a;
a = (totals * 100)/numbers;
return a;
}
float calc_minper(float perc[6])
{
int i;
float min;
min = perc[0];
for (i=1; i<6; i++)
{
if (perc[i] < min)
min = perc[i];
}
return min;
}
float calc_maxper(float perc[6])
{
int i;
float max;
max = perc[0];
for (i=1; i<6; i++)
{
if (perc[i] > max)
max = perc[i];
}
return max;
}
Ok j'ai finalement obtenu ce fait.
Un peu long et en désordre, mais il fait définitivement le travail !!
printf("20%|");
for (i=0; i<6; i++)
{
if (percentages[i] >= 20)
printf("* ");
}
printf("\n");
printf("16%|");
for (i=0; i<6; i++)
{
if (percentages[i] >= 16)
printf("* ");
}
printf("\n");
printf("12%|");
for (i=0; i<6; i++)
{
if (percentages[i] >= 12)
printf("* ");
}
printf("\n");
printf(" 8%|");
for (i=0; i<6; i++)
{
if (percentages[i] >= 8)
printf("* ");
}
printf("\n");
printf(" 4%|");
for (i=0; i<6; i++)
{
if (percentages[i] >= 4)
printf("* ");
}
printf("\n");
printf(" +------------\n");
printf(" 1 2 3 4 5 6\n");
Merci mec pour vos idées !! Si vous avez des idées rapides pour le rendre plus court, je suis tout ouïe!
Où exactement obtenez-vous stucked? BTW: devoirs? – Matthias
Au lieu de déboguer tout votre code, pourriez-vous nous indiquer - quel est le problème avec la solution actuelle, quelle est la sortie actuelle, etc.? –
Votre fonction calc_percentage renvoie un int casted à float. Forcer les opérations à virgule flottante en utilisant 100.0 au lieu de 100. – Spidey