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
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
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
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é :
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
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
17 févr. 2010 à 21:51
merci beaucoup
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
18 févr. 2010 à 01:29
De rien, bonne continuation ;-)