Se connecter avec
S'enregistrer | Connectez-vous

les tableaux en c

Dernière réponse : dans Programmation

bonjour,
Voilà j'arrive vraiment pas à comprendre les tableaux si quelqu'un a trouvé l'erreur. :(  :euh:
Code : C

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. double moyenneTableau(long tableau[], long tailleTableau);
  4.  
  5. int main(int argc, char *argv[])
  6.  
  7. {
  8.  
  9. double tableau[4] = {1.0,1.0,1.0,1.0};
  10. long i = 0;
  11.  
  12. moyenneTableau(tableau, 4);
  13.  
  14.  
  15.  
  16. system("pause");
  17. return 0;
  18.  
  19. }
  20.  
  21. double moyenneTableau(long tableau[], long tailleTableau)
  22. {
  23.  
  24. double addition = 0.0;
  25.  
  26. double i ;
  27.  
  28.  
  29.  
  30. for (i = 0.0 ; i < tailleTableau ; i++)
  31.  
  32. {
  33.  
  34. addition = addition + *tableau / tailleTableau ;
  35.  
  36. printf("%ld\n", addition);
  37.  
  38. }
  39.  
  40. }


Sa affiche
0
0
0
0
appuyez sur une touche pour continuer...

Autres pages sur : tableaux

Lassé par la pub ? Créez un compte

bonjour,

- les indices d'un tableau sont des entiers or tu déclares i comme étant un double!

- le tableau est déclaré en tant que "double" dans main et en tant que "long" dans la fonction...

- "long" indique un entier sur 4 octet (faut juste retenir que c'est un entier pour l'instant) et la division de 2 entiers produit un entier:
*tableau / tailleTableau => entier (parce que tableau est déclaré en tant que "long")

- tu utilises "i" dans le for mais tu ne l'utilises plus après !!!!

pour faire une moyenne, tu veux surement additionner les éléments du tableau puis diviser par la taille... or *tableau ne cible que le premier élément du tableau. utilises plutot la notation: tableau
Expert Programmation

Je pense qu'il voulait dire "moi et les tableaux".

Sinon, daviddu56, fais voir les modifications que tu as apporté suite aux remarques de coca et on verra ce qu'il faut encore modifier :) 

en meme temps, 1 son code est abherent,

>tu utilises "i" dans le for mais tu ne l'utilises plus après
+1

moyenneTableau(long tableau[], long tailleTableau)
Absolument inutile: a part de vérifier a chaque fois la taille du tableau avant de le parcourir (je verrai plutôt un while(tableau!= NULL) mais bon....


Enfin, il n'y a aucune fonction qui te remonte directement cette info?? math.h [...] ??

elendilm a dit :
(je verrai plutôt un while(tableau!= NULL)

ca c'est un bon moyen pour avoir une segmentation fault :p 
si i=4, comme son tableau est déclaré avec 4, tableau pointe vers une adresse en dehors qui n'est pas forcément NULL

elendilm a dit :

Enfin, il n'y a aucune fonction qui te remonte directement cette info?? math.h [...] ??

à mon avis, ca doit etre un exercice d'un cours ou quelque chose du genre, bref, pour apprendre
Expert Programmation

Citation :
ca c'est un bon moyen pour avoir une segmentation fault :p 
si i=4, comme son tableau est déclaré avec 4, tableau pointe vers une adresse en dehors qui n'est pas forcément NULL

+1
Il faut toujours faire passer la taille d'un buffer, c'est une habitude à toujours prendre. En plus ça peut être pratique dans d'autres cas (pour ne gérer qu'une partie du tableau).

voilà les modi:
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. long moyenneTableau(long tableau[], long tailleTableau);
  5.  
  6. int main(int argc, char *argv[])
  7. {
  8.  
  9. long tableau[4] = {1,2,5,5};
  10.  
  11.  
  12. moyenneTableau(tableau, 4);
  13.  
  14. system("pause");
  15. return 0;
  16. }
  17. long moyenneTableau(long tableau[], long tailleTableau)
  18. {
  19. long addition = 0;
  20. long i ;
  21.  
  22. for (i = 0 ; i < tailleTableau ; i++)
  23. {
  24. addition = addition + tableau[i] / tailleTableau ;
  25. printf("%ld\n", addition);
  26. }
  27. }

et sa affiche :
0
0
1
2

c'est bon j'ai trouvé :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. double moyenneTableau(double tableau[], long tailleTableau);
  5.  
  6. int main(int argc, char *argv[])
  7. {
  8.  
  9. double tableau[4] = {1.0,1.0,1.0,1.0};
  10. double moyenne = 0.0 ;
  11. long i = 0;
  12.  
  13. moyenne = moyenneTableau(tableau, 4); // fonction
  14.  
  15. printf("%lf\n\n", moyenne); // on affiche la moyenne
  16.  
  17. system("pause");
  18. return 0;
  19. }
  20. double moyenneTableau(double tableau[], long tailleTableau)
  21. {
  22. double addition = 0.0;
  23. double moyenne = 0.0 ;
  24. long i ;
  25.  
  26. for (i = 0 ; i < tailleTableau ; i++)
  27. {
  28. addition = addition + tableau[i] ; // on additionne la somme des nombres
  29. }
  30.  
  31. moyenne = addition / tailleTableau ; // on divise par le nombre de nombre ^^
  32.  
  33. return moyenne ; // on renvoie la moyenne
  34.  
  35. }

merci a tous :)  ;) 

Tout a fait normal du fait que le resultat de ta division est une division entiere avec reste. Donc au detail du passage :

addition = 0 + 1/4 soit addition = 0+0 donc addition = 0
addition = 0 + 2/4 soit addition = 0+0 donc addition = 0
addition = 0 + 5/4 soit addition = 0+1 donc addition = 1
addition = 1 + 5/4 soit addition = 1+1 donc addition = 2

Si tu veux faire cela il faut que tu sorte le resultat de ta division en float avec un transtypage ou alors eventuellement que tu stocke ton addition sans faire la division a chaque fois puis le diviser au moment de l'affichage seulement cad :

  1. for (i = 0 ; i < tailleTableau ; i++)
  2. {
  3. addition = addition + tableau[i];
  4. printf("%ld\n", addition/tailleTableau);
  5. }


Cela te permet de rester sur des entiers tout en ayant un resultat + correct
Lassé par la pub ? Créez un compte
Tom's guide dans le monde