Probleme avec C
Résolu
Bonjour,
J'ai un problème avec un programme qui calcule la fréquence d'obtention de chaque valeur après une suite de lancer de dés, j'ai en retour f1=0 f2=0 .... f6=0 !!!
voici le programme
Le 16/02/2010
fichier mon2meprog.c
ce que fait le programme : Pour une suite de lancers de dés,
calcul des fréquences d'obtention de chaque valeur.
*/
#include <stdio.h> // pour lecture/écriture
int main()
{
// déclaration des constantes et variables
int valeur,i,nbLancers,nb1,nb2,nb3,nb4,nb5,nb6;//compteurs
float f1,f2,f3,f4,f5,f6; // fréquences
// initialisations
printf("calcul des fréquences de chaque valeur\n");
printf("valeur = ? "); scanf("%d",&valeur); //premiere valeur de la suite de lancers
nbLancers = 0;
nb1 = 0;
nb2 = 0;
nb3 = 0;
nb4 = 0;
nb5 = 0;
nb6 = 0;
// .....
do{
//incrémentation des compteurs
switch(valeur){
case'1':
nb1 = nb1+1;
case'2':
nb2 = nb2+1;
case'3':
nb3 = nb3+1;
case'4':
nb4 = nb4+1;
case'5':
nb5 = nb5+1;
case'6':
nb6 = nb6+1;
}
nbLancers = nbLancers+1;
printf("nouvelle valeur = ? "); scanf("%d",&valeur); //valeur suivante
}while((valeur>0)&&(valeur<7));
if (nbLancers!=0){
// calcul des fréquences
f1 = nb1/nbLancers;
f2 = nb2/nbLancers;
f3 = nb3/nbLancers;
f4 = nb4/nbLancers;
f5 = nb5/nbLancers;
f6 = nb6/nbLancers;
printf("fréquence de la valeur 1 = %f ",f1);
printf("\n"); // pour passer à la ligne
printf("fréquence de la valeur 2 = %f ",f2);
printf("\n"); // pour passer à la ligne
printf("fréquence de la valeur 3 = %f ",f3);
printf("\n"); // pour passer à la ligne
printf("fréquence de la valeur 4 = %f ",f4);
printf("\n"); // pour passer à la ligne
printf("fréquence de la valeur 5 = %f ",f5);
printf("\n"); // pour passer à la ligne
printf("fréquence de la valeur 6 = %f ",f6);
printf("\n"); // pour passer à la ligne
}
else{
printf("aucune valeur entre 1 et 6 !");
}
return 0;
}
J'attend vos réponses
Merci
J'ai un problème avec un programme qui calcule la fréquence d'obtention de chaque valeur après une suite de lancer de dés, j'ai en retour f1=0 f2=0 .... f6=0 !!!
voici le programme
Le 16/02/2010
fichier mon2meprog.c
ce que fait le programme : Pour une suite de lancers de dés,
calcul des fréquences d'obtention de chaque valeur.
*/
#include <stdio.h> // pour lecture/écriture
int main()
{
// déclaration des constantes et variables
int valeur,i,nbLancers,nb1,nb2,nb3,nb4,nb5,nb6;//compteurs
float f1,f2,f3,f4,f5,f6; // fréquences
// initialisations
printf("calcul des fréquences de chaque valeur\n");
printf("valeur = ? "); scanf("%d",&valeur); //premiere valeur de la suite de lancers
nbLancers = 0;
nb1 = 0;
nb2 = 0;
nb3 = 0;
nb4 = 0;
nb5 = 0;
nb6 = 0;
// .....
do{
//incrémentation des compteurs
switch(valeur){
case'1':
nb1 = nb1+1;
case'2':
nb2 = nb2+1;
case'3':
nb3 = nb3+1;
case'4':
nb4 = nb4+1;
case'5':
nb5 = nb5+1;
case'6':
nb6 = nb6+1;
}
nbLancers = nbLancers+1;
printf("nouvelle valeur = ? "); scanf("%d",&valeur); //valeur suivante
}while((valeur>0)&&(valeur<7));
if (nbLancers!=0){
// calcul des fréquences
f1 = nb1/nbLancers;
f2 = nb2/nbLancers;
f3 = nb3/nbLancers;
f4 = nb4/nbLancers;
f5 = nb5/nbLancers;
f6 = nb6/nbLancers;
printf("fréquence de la valeur 1 = %f ",f1);
printf("\n"); // pour passer à la ligne
printf("fréquence de la valeur 2 = %f ",f2);
printf("\n"); // pour passer à la ligne
printf("fréquence de la valeur 3 = %f ",f3);
printf("\n"); // pour passer à la ligne
printf("fréquence de la valeur 4 = %f ",f4);
printf("\n"); // pour passer à la ligne
printf("fréquence de la valeur 5 = %f ",f5);
printf("\n"); // pour passer à la ligne
printf("fréquence de la valeur 6 = %f ",f6);
printf("\n"); // pour passer à la ligne
}
else{
printf("aucune valeur entre 1 et 6 !");
}
return 0;
}
J'attend vos réponses
Merci
3 réponses
C'est parce que tu fais une division entière et non sur les float au moment de calculer les fréquences. Typiquement 3/4 = 0.75 --> 0 une fois sur les int. Ton programme corrigé et un peu factorisé :
Ce qui donne :
Ou encore :
Bonne chance
#include <stdio.h> // pour lecture/écriture #define NB_FACES 6 int main() { // déclaration des constantes et variables int valeur, i, nbLancers; int nb[NB_FACES]; //compteurs float f[NB_FACES]; // fréquences // initialisations nbLancers = 0; for(i=0;i<NB_FACES;++i) nb[i] = 0; // ..... printf("calcul des fréquences de chaque valeur\n"); do{ // lire valeur printf("nouvelle valeur = ? "); scanf("%d",&valeur); //valeur suivante //incrémentation des compteurs ++nb[valeur-1]; ++nbLancers; }while((valeur>0) && (valeur<=NB_FACES)); if (nbLancers){ // calcul des fréquences for(i=0;i<NB_FACES;++i) f[i] = (float) nb[i] / nbLancers; // affichage des fréquences for(i=0;i<NB_FACES;++i) printf("fréquence de la valeur %d = %lf\n",i+1,f[i]); }else printf("aucune valeur entre 1 et %d !\n",NB_FACES); return 0; }
Ce qui donne :
calcul des fréquences de chaque valeur nouvelle valeur = ? 5 nouvelle valeur = ? 2 nouvelle valeur = ? 4 nouvelle valeur = ? 2 nouvelle valeur = ? 3 nouvelle valeur = ? 7 fréquence de la valeur 1 = 0.000000 fréquence de la valeur 2 = 0.333333 fréquence de la valeur 3 = 0.166667 fréquence de la valeur 4 = 0.166667 fréquence de la valeur 5 = 0.166667 fréquence de la valeur 6 = 0.000000
Ou encore :
#include <stdio.h> // pour lecture/écriture #include <string.h> #define NB_FACES 6 int main() { // déclaration des constantes et variables int valeur, i, nbLancers; float f[NB_FACES]; // fréquences // initialisations nbLancers = 0; memset(f,0,sizeof(float)*NB_FACES); // ..... printf("calcul des fréquences de chaque valeur\n"); do{ // lire valeur printf("nouvelle valeur = ? "); scanf("%d",&valeur); //valeur suivante //incrémentation des compteurs ++f[valeur-1]; ++nbLancers; }while((valeur>0) && (valeur<=NB_FACES)); if (nbLancers){ // calcul des fréquences for(i=0;i<NB_FACES;++i) f[i] /= nbLancers; // affichage des fréquences for(i=0;i<NB_FACES;++i) printf("fréquence de la valeur %d = %lf\n",i+1,f[i]); }else printf("aucune valeur entre 1 et %d !\n",NB_FACES); return 0; }
Bonne chance