Ma division ne marche pas

Résolu/Fermé
itachi78 - 22 juil. 2014 à 00:40
 itachi78 - 23 juil. 2014 à 19:20
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;
}



A voir également:

2 réponses

awesome33 Messages postés 32 Date d'inscription samedi 7 décembre 2013 Statut Membre Dernière intervention 26 juillet 2014 68
22 juil. 2014 à 02:01
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
merci javais oublié ss vous jorai ptetre passer une heure à chercher
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
22 juil. 2014 à 09:06
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
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 samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
23 juil. 2014 à 00:36
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
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 samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
23 juil. 2014 à 15:16
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
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