Ma division ne marche pas

Résolu
itachi78 -  
 itachi78 -
Bonjour,

g un proble dans le programme ci-desssous g cree une fonction ki calcule la moyenne des valeurs de mon tableau mais mon programme affiche une moyenne de zero alors kelle devrait etre de 7. J'aimerais que vous me disiez d'ou peut venir le probleme car je vois vraiment pas.
Programme :

#include <stdio.h>
#include <stdlib.h>

void afficheTableau(int tableau[], int tailleTableau);
int sommeTableau(int tableau[], int tailleTableau);
double moyenneTableau(int tableau[], int tailleTableau);

int main()
{
int tableau[4] = {3, 4, 10, 11};
afficheTableau(tableau, 4);
sommeTableau(tableau, 4);
moyenneTableau(tableau, 4);

return 0;
}

void afficheTableau(int tableau[], int tailleTableau)
{
int i;
for(i = 0; i < tailleTableau; i++)
{
printf("%d \n", tableau[i]);
}
}

int sommeTableau(int tableau[], int tailleTableau)
{
int somme = 0;
somme = tableau[0] + tableau[1] + tableau[2] + tableau[3];
printf("\n%d \n\n", somme);
return somme;
}

double moyenneTableau(int tableau[], int tailleTableau)
{
double moyenne = 0;
int somme = 0;
somme = tableau[0] + tableau[1] + tableau[2] + tableau[3];
moyenne = somme / tailleTableau;
printf("%d \n\n", moyenne);
return moyenne;
}



2 réponses

awesome33 Messages postés 32 Date d'inscription   Statut Membre Dernière intervention   68
 
Salut,
Dans cette
fonction double moyenneTableau(int tableau[], int tailleTableau) 
tas en sortie un double , moyen est de type double oui Mais Dans ton printf t'affiche la valeur decimal tu fait
printf("%d \n\n", moyenne); 
mais il faut faire
printf("%f \n\n", moyenne); 



Bye
M
0
iyachi78
 
merci javais oublié ss vous jorai ptetre passer une heure à chercher
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Bonjour,

En plus de ce que dit awesome33 : printf("%f...",moyenne) au lieu de "%d" pour afficher un double, il faut faire attention au niveau de la division :
moyenne=(double)somme/tailleTableau; sinon tu auras un arrondi (division entière).

Cdlt,
0
itachi78
 
je vois ce que vous voulez dire mais pas besoin somme est deja defini comme un double juste avant en plus le resultat de ma division est un nombre entier c 7
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Ben non justement...
Je copie-colle la déclaration de somme dans la fonction moyenneTableau() :
int somme = 0;
int veut dire entier.
Donc somme/tailleTableau est une division d'entier. Donc, soit tu castes (cf. mon post précédent), soit tu fais double somme=0;
0
itachi78
 
justement tu te trompes mais c vrai ke je t'ai mal expliquer. La variable somme est un nombre entier car c'est une somme de nombre entier. C'est la variable moyenne qui doit être de type double car il y a de grande chance qu'une moyenne soit un nombre décimal mais je le repete dans mon cas c'est inutile parce que le resultat de ma moyenne est... 7 !
Mais merci quand même pour l'aide que tu as voulu me procurer.
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
C'est toi qui te trompes...
C'est la variable moyenne qui doit être de type double
Oui, mais tu parlais de la variable "somme".
Mais même, si tu parles cette fois de la variable "moyenne", tu te trompes encore...
En effet, moyenne est de type double. Mais une division de nombres entiers (somme / tailleTableau) retourne un entier (partie entière). Ensuite, ce nombre sera casté en double avant d'être stocké dans "moyenne". Mais trop tard, tu perds l'arrondi. Dans ton cas, effectivement, ça ne se verra pas (28/4=7). Mais si tu fais un essai avec d'autres notes, ça se verra.
0
itachi78
 
pas besoin de vérifier avec un autre nombre. Comme je te l'ai dit le résultat de ma moyenne est un nombre entier ( 7 ) mais quand je compile le résultat affiché est 7,0000 donc si le résultat aurait été un nombre décimal il serait affiché bien comme il faut.
0