problème de calcul d'une moyenne en 'double'

problème de calcul d'une moyenne en 'double' - C - Programmation

Marsh Posté le 19-06-2010 à 14:26:43    

Bonjour, donc voilà j'ai du réaliser un exercice l'énoncé est dans le code, mais j'ai un petit souci je voudrais que ma moyenne s'affiche exactement donc le type de ma variable est un 'double' et ça m'affiche 3.0000 mais pas avec la précision après la virgule ...
merci de 'laide

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. /*
  4. Exercice 2 : créer une fonction moyenneTableau qui calcule et renvoie la moyenne des valeurs.
  5. Prototype :
  6. Code : C
  7. double moyenneTableau(int tableau[], int tailleTableau);
  8. La fonction renvoie un double car une moyenne est parfois un nombre décimal (souvent même  )
  9. */
  10. double moyenneTableau(int tableau[], int tailleTableau);
  11. int main(int argc, char *argv[])
  12. {
  13.     int tableau1[4] = {1, 2, 3, 5};
  14.     int i = 0;
  15.     printf("=== TABLEAU ===\n" );//affichage tableau
  16.     for(i = 0; i < 4; i++)
  17.     {
  18.         printf("%d\n", tableau1[i]);
  19.     }
  20.     // Fin affichage tableau
  21.     printf("\n--- MOYENNE DU TABLEAU ---" );
  22.     printf("\n%lf\n", moyenneTableau(tableau1, 4));// appelle de la fonction sommeTableau
  23. }
  24. double moyenneTableau(int tableau[], int tailleTableau)
  25. {
  26.     int i = 0, somme = 0;
  27.     double moyenne = 0;
  28.     for(i = 0; i < tailleTableau; i++)//calcule la somme pour chaque terme du tableau
  29.     {
  30.         somme = somme + tableau[i];
  31.     }
  32.     moyenne = somme/tailleTableau;
  33.     return moyenne;
  34. }

Reply

Marsh Posté le 19-06-2010 à 14:26:43   

Reply

Marsh Posté le 19-06-2010 à 15:50:58    

Personne ne vois pourquoi?

Reply

Marsh Posté le 19-06-2010 à 15:53:25    

moyenne = somme/tailleTableau
 
tout ça c'est des int, int/int = int, donc les virgules sont tronquées.
 
Donc:
 
moyenne = somme/(double)(tailleTableau);

Reply

Marsh Posté le 19-06-2010 à 17:38:59    

Merci donc si je comprend bien il suffit de juste mettre soit la somme ou soit la taille du tableau en 'double' pour que ca marche?
 
Merci encore

Reply

Marsh Posté le 19-06-2010 à 19:22:11    

C'est une question de typage des opérations et de conversion automatique:
int/int -> int (éventuellement ensuite converti en double si ta variable pour stocker le  résultat est de type double)
double/double -> double
int/double -> double
double/int -> double
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 21-06-2010 à 21:51:47    

Salut
 
Une opération arithmétique est faite dans le type le plus large des opérandes impliqués.
Si tu divises 7 par 3 tu obtiendras 2. Mais si tu divises 7.0 par 3 ou 7 par 3.0 tu obtiendras 2.33333
 
Attention, en cas d'opération intermédiaire, celle-ci ne prend en compte que les opérandes utilisés.
Exemple: 7/3 + 2.0   => l'opération se fera d'abord avec 7/3 => résultat 2 puis elle continuera avec +2.0 => résultat final 4.0
Bonne méthode: 7.0/3 + 2 ou bien 7 / 3.0 + 2 ou bien (double)7 / 3 + 2
 

jasinski13 a écrit :

il suffit de juste mettre soit la somme ou soit la taille du tableau en 'double' pour que ca marche?


Pas forcément. Un cast lors de l'opération suffit
moyenne=(double)somme / tailleTableau


Message édité par Sve@r le 21-06-2010 à 21:53:37

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed