Se connecter / S'enregistrer
Votre question

les tableaux en c

Tags :
  • element
  • Programmation
Dernière réponse : dans Programmation
17 Août 2007 12:23:23

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

17 Août 2007 14:57:50

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
17 Août 2007 18:36:24

j'arrive toujours pas !!!(faut dire mais et les tableaux)
Contenus similaires
17 Août 2007 19:07:14

daviddu56 a dit :
j'arrive toujours!!!(faut dire mais et les tableaux)



gniii ?
a c 232 L Programmation
17 Août 2007 19:51:42

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 :) 
17 Août 2007 20:19:33

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 [...] ??
17 Août 2007 21:13:01

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
a b L Programmation
18 Août 2007 10:02:40

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).

18 Août 2007 13:05:55

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
18 Août 2007 13:16:09

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 :)  ;) 
18 Août 2007 13:17:04

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
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS