Probleme avec C

Résolu/Fermé
pedroops - 17 févr. 2010 à 17:04
mamiemando Messages postés 33407 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 29 novembre 2024 - 18 févr. 2010 à 01:29
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

3 réponses

mamiemando Messages postés 33407 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 29 novembre 2024 7 806
17 févr. 2010 à 17:25
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é :

#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
2
pedroops Messages postés 28 Date d'inscription mercredi 17 février 2010 Statut Membre Dernière intervention 20 mai 2010
17 févr. 2010 à 21:51
merci beaucoup
0
mamiemando Messages postés 33407 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 29 novembre 2024 7 806
18 févr. 2010 à 01:29
De rien, bonne continuation ;-)
0