Problème de tableau en C

Bonjour :)

J'ai modifié le code, mais maintenant il ne m'affiche pas le bon nombre!

main.c:

Bloc de code:
int main(int argc, char *argv[])
{
    long somme[6] = {4,3,6,8,2,19};
    long moyenne[3] = {12, 34, 24};
    
    printf("%ld\n\n", sommeTableau(somme, 6));
    
    printf("La moyenne est %lf\n\n", moyenneTableau(moyenne));
    
    
    return 0;
}

tableau.c:

Bloc de code:
double moyenneTableau(long tableau[])

{
    
    long i; // notre compteur
    double moyenne = 0;
    
    for(i = 0; i<=sizeof(tableau); i++) // tant que "i" est plus petit que la taille du tableau, on incrémente
        
    {
        moyenne = tableau[i] + moyenne; //on fait un lien vers chaque valeurs du tableau pour les aditionner
    }
    
    moyenne = moyenne / sizeof(tableau); //on fait la moyenne
    
    return moyenne; // on renvoie la moyenne
}

Si vous essayez, il renvoie la moyenne 19.25 alors qu'elle devrait être 23.33!
 
Bonjour!

J'ai remodifié mon code, mais maintenant il affiche mon chiffre avec ensuite .333 périodique au lieu de .5 (quand je fais la moyenne dans la fonction) Par exemple, au lieu de m'afficher 3.533 comme moyenne, il m'affiche 3.33333 :siffle:

main.c

Bloc de code:
int main(int argc, char *argv[])
{
    long somme[6] = {4,3,6,8,2,19};
    long moyenne[3] = {0.6, 4, 6};
    
    printf("%ld\n\n", sommeTableau(somme, 6));
    
    printf("La moyenne est %lf\n\n", moyenneTableau(moyenne, 3));
    
    
    return 0;
}


tableau.c

Bloc de code:
// créer une fonction moyenneTableau qui calcule et renvoie la moyenne des valeurs.


double moyenneTableau(long tableau[], long tailleDuTableau)


{
    
    long i; // notre compteur
    double moyenne = 0;


    
    for(i = 0; i<tailleDuTableau; i++) // tant que "i" est plus petit que la taille du tableau, on incrémente
        
    {
        moyenne = tableau[i] + moyenne; //on fait un lien vers chaque valeurs du tableau pour les aditionner
    }
    
    moyenne = (moyenne/tailleDuTableau); //on fait la moyenne
    
    return moyenne; // on renvoie la moyenne
}
 
Dur, dur...

Tu as remis le tableau en long au lieu de changer l'entete de la fonction...

Voici le bon code.

Fait gaffe aux types des données...

Bloc de code:
// créer une fonction moyenneTableau qui calcule et renvoie la moyenne des valeurs.


double moyenneTableau(double tableau[], long tailleDuTableau)


{
    
    long i; // notre compteur
    double moyenne = 0;


    
    for(i = 0; i<tailleDuTableau; i++) // tant que "i" est plus petit que la taille du tableau, on incrémente
        
    {
        moyenne = tableau[i] + moyenne; //on fait un lien vers chaque valeurs du tableau pour les aditionner
    }
    
    moyenne = (moyenne/tailleDuTableau); //on fait la moyenne
    
    return moyenne; // on renvoie la moyenne
}
int main(int argc, char *argv[])
{
    long somme[6] = {4,3,6,8,2,19};
    double moyenne[3] = {0.6, 4, 6};
    
    
    printf("La moyenne est %lf\n\n", moyenneTableau(moyenne, 3));
    
    
    return 0;
}


Cordialement
 
Hourra! Ça fonctionne! Merci beaucoup pour ton aide, c'est fou ce que je peux faire des erreurs stupies *se frappe la tête sur le mur*

N.B: J'ai été grillé par ta réponse :p
 
Merci mais il m'affiche seulement 31.0000, pas de decimaux (alorsbque ça devrait être 31,666667)!


long notes [5] = {87.4,82.5,94.0,92.3,79.0};
printf ( %f, mydouble);

mydouble = 100;
printf ( %f, mydouble / 73);

mydouble = 100;
printf ( %f, mydouble / 73.0);

CQFD

http://tigcc.ticalc.org/doc/htfloats.html

http://www.network-theory.co.uk/gcc/intro/

aussi if (sizeof ... permettrait de gerer

et bonne annee

Bloc de code:
int main(int argc, char *argv[]) {
  int i;
  
  printf("-- argc: %i \n", argc);
  
  for ( i=0 ; i < argc ; i++ )
    printf("-- argv[%i]: %s \n", i, argv[i]);
  
  printf("-- args: ");
  while (argc--)
    printf("%s  ", *argv++);
  
  puts("");
  
  return 0;
}
 
Pourquoi me fais-je donc traiter de bûcherons et d'indien par tous les français de ce forum? :p Je ne dépèce pas des phoques pour allumer une lampe à l'huile, nous avons l'électricité ici, eh ouais :cool:
 
Je ne dépèce pas des phoques pour allumer une lampe à l'huile, nous avons l'électricité ici, eh ouais :cool:

Tu veux dire que les chiens de traîneau font tourner une dynamo ? ;)
Bon, c'est pas tout ça, mais j'enfile mon béret et je pars acheter ma baguette et mon litre de rouge.
 
C'est quand ca ce met à marcher que l'on commence à programmer rééllement...

Reprenons ta ligne :
printf("La moyenne est %lf\n\n", moyenneTableau(moyenne, 3));

Elle n'est pas tres jolie : si tu rajoute un element à moyenne, tu va être obligé de modifier également la valeur "3". En général, on évite d'avoir des valeurs litérales comme cela dans un programme.

Ton amie est la fonction "sizeof". sizeof donne la taille d'a peu pres n'importe quoi.
par exemple:

sizeof(double)
va donner la taille en octet nécessaire pour stocker un double.

On va donc pouvoir écrire :

Bloc de code:
// Le nombre d'élement d'un tableau est égal à la taille du tableau que divise la taille d'un  
// élement
   printf("La moyenne est %lf\n\n", moyenneTableau(moyenne, sizeof(moyenne)/sizeof(double)));

Cordialement
 
Merci du conseil, même si je ne comprends pas trop cette ligne:

Bloc de code:
sizeof(moyenne)/sizeof(double)));

Il calcule la taille en octet de moyenne, mais pourquoi divise-t-il?

Hors-sujet: je vous invite à lire ce cour article qui parle de la vague de froid sibérienne qui est présentement installée au Québec (on parle de pointe à -40° Celcius, sans compter le refroidissement éolien)
 
Le nombre d'élements d'un tableau est égal à la taille du tableau que divise la taille d'un élement.

Ok ?

sizeof(moyenne) donne la taille en octet de moyenne
sizeof(double) donne la taille en octet d'un double (un element du tableau)

Donc :

sizeof(moyenne)/sizeof(double)

Donne le nombre d'élements.

Cordialement
 
Ah et le nombre en octet d'un double du tableau est toujours identique aux autres double du tableau, si j'ai bien compris?
 
il est 7h19 AM PST pour moi :p:coucou: une autre chose essaye de programmer en anglais
c'est la langue choisi pour partager nos connaissances et ca permet a quelqu un ne parlant pas francais mais un basic anglais de te comprendre
Oui enfin ça, à voir fonction du contexte, c'est un débat sans fin. Si c'est du code écrit par des français pour des français, si c'est pour se retrouver avec des traductions douteuses qu'au final personne comprend, et des commentaires abrégés faute de vocabulaire, autant rester sur du français. La plupart des applis françaises sur lesquelles je suis passé annotées en anglais, c'était assez dramatique. Et du reste j'y ai sans doute contribué. =)