Bonjour je suis les cours en ligne et j'essaye de faire un exercice le problème c'est que je n'arrive pas à multiplier les valeurs de mon tableau puis la conserver dans ma variable résultat.
#include <stdio.h>
#include <stdlib.h>
double moyenneTableau(int tableau[], int tailleTableau);
int main()
{
int tableau[4] = {15, 13, 9, 10, 11};
moyenneTableau(tableau, 4);
printf("%d", moyenneTableau);
return 0;
}
double moyenneTableau(int tableau[], int tailleTableau)
{
double resultat;
for (int i = 0 ; i < tailleTableau ; i++)
{
resultat *=tableau[i];
}
return resultat;
}
Houlà, ne t'en va pas ! Je pense que ça marche, mais ce n'est pas une façon correcte de faire (la fonction somme Tableau de type 'double' ne retourne rien, elle calcule une moyenne ce qui contredit son nom, le retour de la fonction est simulé par une variable globale, le pointeur envoyé en troisième argument ne sert à rien...). Ça suggère de probables confusions (je soupçonne que tu n'as pas compris le concept de variable locale dans une fonction).
Ça fonctionne, mais il y a mieux, ce que je te propose, c'est de supprimer la variable globale moyenne et de la déclarer en variable locale dans la fonction main, ça va te demander d'adapter ton code en conséquence.
Bon je suis un peu une catastrophe en programmation mais je n'abandonne pas.
Je viens de faire ce que vous m'avez demandez.
Est - ce mieux comme ça ?
double moyenneTableau(double tableau[], double tailleTableau, double *resultat, double *moyenne)
{
long i = 0;
while (i < tailleTableau)
{
*resultat += tableau[i];
i++;
}
*moyenne = *resultat / tailleTableau;
}
Une catastrophe ? pour le moment. La programmation c'est pas un don qui tombe du ciel, ça s'apprend. En y travaillant. Donc c'est normal d'être "une catastrophe" au début, et c'est pas une excuse pour ne pas s'améliorer.
"j'ai fait ce que vous avez dit" : en général, ceux qui disent ça n'ont pas fait tout à fait ce qu'on leur a dit, et cherchent juste à transférer la responsabilité de leurs erreurs sur ceux qui les ont aidés, ce qui est sympa.
Est-ce mieux ?
Faut voir. La question, c'est pas que ça nous fasse plaisir (validation externe), mais que tu penses que ce que fais est parfaitement logique, et que ça marche (confrontation avec la réalité : on doit constater que le programme fait ce qui est prévu).
1. la fonction est déclarée "double moyenneTableau(....)". Il devrait donc s'y trouver une instruction qui retourne un double. Où est-elle ?
2. Si la valeur retournée est celle du résultat (la valeur de la moyenne), à quoi sert le dernier paramètre ?
Reprenons dans l'autre sens : si j'ai besoin de la moyenne d'un tableau, je fournis le tableau, et le nombre d'éléments. C'est tout. Pourquoi y a t'il 4 parametres ?
Normalement, ce qui est attendu, c'est plutôt ça :
int main(void)
{
double tableau[4] = {15.0, 2.0, 9.0, 10.0};
double moyenne = moyenneTableau(tableau, 4);
printf("MOYENNE : %f\n\n", moyenne);
return 0; // 'main' doit retourner un 'int' comme l'indique son prototype
}
Est-ce que tu vois comment écrire la fonction 'moyenneTableau' pour qu'elle s'utilise de cette façon ? (Indication : elle doit retourner un 'double', donc avoir une instruction 'return' , comme le 'main' d'ailleurs.)
Pourquoi ne pas tester avec des valeurs non entières (des demi points) ?
Pourquoi ne pas lire les avertissements généreusement produits par le compilateur ?
Pourquoi nous poser des questions, et ne pas tenir compte des réponses ?
Pourquoi, hein, pourquoi ?
- Edité par michelbillaud 10 avril 2021 à 8:32:38
Multiplier les valeurs d'un tableau
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Le Tout est souvent plus grand que la somme de ses parties.