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

  1. awesome33 Messages postés 37 Statut Membre 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
    1. iyachi78
       
      merci javais oublié ss vous jorai ptetre passer une heure à chercher
      0
  2. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
     
    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
    1. 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
    2. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
       
      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
    3. 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
    4. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
       
      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
    5. 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