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
Sa affiche
0
0
0
0
appuyez sur une touche pour continuer...
Voilà j'arrive vraiment pas à comprendre les tableaux si quelqu'un a trouvé l'erreur.
:euh:Code : C
#include <stdio.h>
#include <stdlib.h>
double moyenneTableau(long tableau[], long tailleTableau);
int main(int argc, char *argv[])
{
double tableau[4] = {1.0,1.0,1.0,1.0};
long i = 0;
moyenneTableau(tableau, 4);
system("pause");
return 0;
}
double moyenneTableau(long tableau[], long tailleTableau)
{
double addition = 0.0;
double i ;
for (i = 0.0 ; i < tailleTableau ; i++)
{
addition = addition + *tableau / tailleTableau ;
printf("%ld\n", addition);
}
}
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
- 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
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 [...] ??
>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
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
Citation :
ca c'est un bon moyen pour avoir une segmentation fault
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:
et sa affiche :
0
0
1
2
#include <stdio.h>
#include <stdlib.h>
long moyenneTableau(long tableau[], long tailleTableau);
int main(int argc, char *argv[])
{
long tableau[4] = {1,2,5,5};
moyenneTableau(tableau, 4);
system("pause");
return 0;
}
long moyenneTableau(long tableau[], long tailleTableau)
{
long addition = 0;
long i ;
for (i = 0 ; i < tailleTableau ; i++)
{
addition = addition + tableau[i] / tailleTableau ;
printf("%ld\n", addition);
}
}
et sa affiche :
0
0
1
2
c'est bon j'ai trouvé :
merci a tous
#include <stdio.h>
#include <stdlib.h>
double moyenneTableau(double tableau[], long tailleTableau);
int main(int argc, char *argv[])
{
double tableau[4] = {1.0,1.0,1.0,1.0};
double moyenne = 0.0 ;
long i = 0;
moyenne = moyenneTableau(tableau, 4); // fonction
printf("%lf\n\n", moyenne); // on affiche la moyenne
system("pause");
return 0;
}
double moyenneTableau(double tableau[], long tailleTableau)
{
double addition = 0.0;
double moyenne = 0.0 ;
long i ;
for (i = 0 ; i < tailleTableau ; i++)
{
addition = addition + tableau[i] ; // on additionne la somme des nombres
}
moyenne = addition / tailleTableau ; // on divise par le nombre de nombre ^^
return moyenne ; // on renvoie la moyenne
}
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 :
Cela te permet de rester sur des entiers tout en ayant un resultat + correct
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 :
for (i = 0 ; i < tailleTableau ; i++)
{
addition = addition + tableau[i];
printf("%ld\n", addition/tailleTableau);
}
Cela te permet de rester sur des entiers tout en ayant un resultat + correct
Lassé par la pub ? Créez un compte
- Contenus similaires :
Tags :