As tu compris le fonctionnement, et surtout l'intéret d'une boucle?
Tu apelles ta fonction une fois pour rien (1) et une fois avec de mauvais arguments (2)
EDIT : %d c'est pour les int, c'est %f ou %lf pour les doubles je ne sais plus
double moyenneTableau(int tableau[], int tailleTableau); //bien
int main(int argc, char *argv[]) //bien
{
double tableau[4] = {10, 20, 30, 40}; //Pas ok tu crées un tableau de double or tu aura
//besoin de passer un tableau de int en argument
moyenneTableau(tableau,4);//Pourquoi tu appelles moyenneTableau sans récupérer le retour ?
//En plus il faut un tableau de int en paramètre mais bon l'erreur vient de la déclaration.
printf("La moyenne du tableau est de : %d",moyenneTableau(tableau/4)); // C'est quoi ça ? (tableau/4) non faut écrire (tableau,4) pour passer les arguments, faut les séparés par des virgules (une faute de frappe ?)
return 0; // ok
}
double moyenneTableau(int tableau[], int tailleTableau);
{
double moyenne = 0; int i =0;
for (i=0; i < tailleTableau; i++) // pourquoi pas
{
moyenne = (tableau[0] + tableau[1] + tableau[2] + tableau[3]) / 4;
//euh non là non. Il faut mettre moyenne += (double)tableau[i];
}
return moyenne/tailleTableau; // j'ai déjà rajouter, C'est ici qu'il faut diviser
}
Corrige un peu le code et ce sera bon. Bonne chance.
🍊 - Étudiant - Codeur en C | Zeste de Savoir apprenez avec une communauté | Articles- ♡ Copying is an act of love.
Bonjour, je suis moi-même en train de faire cet exercice, cependant, malgré l'aide que vous avez déjà apporter à ce sujet, il me reste 1 erreur dont je n'arrive pas à me débarrasser
Si vous pouviez m'aider
voici mon code:
#include <stdio.h>
#include <stdlib.h>
double moyenneTableau(int tableau[], int tailleTableau);
int main()
{
int tableau[4] = {17, 8, 19, 96};
double moyenne = 0;
moyenne = moyenneTableau(tableau, 4);
printf("La moyenne des valeurs du tableau est %f\n\n", moyenne);
return 0;
}
double moyenneTableau(int tableau[], int tailleTableau);
{
int i = 0;
double moyenne = 0;
for (i = 0 ; i < tailleTableau ; i++)
{
moyenne += (double)tableau[i];
}
return moyenne/tailleTableau;
}
Bonjour, Pouvez vous m'expliquer cette ligne svp : "moyenne += (double)tableau[i]; " ? Je ne comprends pas l'utilité du (double), en réalité j'aurais écris: moyenne += tableau[i].. Merci d'avance pour votre aide.
Bonjour, Pouvez vous m'expliquer cette ligne svp : "moyenne += (double)tableau[i]; " ? Je ne comprends pas l'utilité du (double), en réalité j'aurais écris: moyenne += tableau[i].. Merci d'avance pour votre aide.
Ce (double) est l'opérateur de conversion de type. Il convertit la valeur tableau[i] de type int en une valeur de type double. Ici, il ne sert à rien, car si on l'ôte, il y a conversion implicite par l'opérateur +=.
T'as l'impression qu'il fonctionne parce que t'as un tableau dont la taille est 4 et dont la somme des valeurs est multiple de 4. Quand tu fais: somme / i, somme et i sont des entiers donc t'auras une division entière, par exemple 1 / 4 == 0 et pas 0.25. Donc tu peux passer somme en double ou faire un cast au dernier moment.
Le but de la fonction moyenne tableau est de retourner la moyenne d'un tableau, pas d'afficher cette moyenne. Il n'y a pas de return a ta fonction, tu devrais avoir un warning. Tu n'as pas besoin de variable moyenne, et diviser par tailleTableau serait plus lisible que de diviser par i.
Avec ce que tu connais du cours ton code devrait être:
double moyenneTableau(int tableau[], int tailleTableau)
{
int i = 0;
int somme = 0;
for(i = 0; i < tailleTableau; i++)
{
somme += tableau[i];
}
return (double)somme / tailleTableau;
}
mais normalement t'avais déja créé une fonction faisant la somme d'un tableau, tu peux la réutiliser:
bon maintenant par rapport a ce que tu ne connais pas encore (normalement). Pour connaitre la moyenne des valeurs d'un tableau, on n'a besoin que de lire celui ci, pas de le modifier, donc il doit être const. Pour représenter une taille, un compteur ou un indexeur il y a le type size_t, qui est un entier naturel (une taille négative n'a pas de sens).
On peut imaginer que les arguments doivent respecter certaines conditions (ce sont les pré-conditions), pour pouvoir appeler la fonction (définit dans la documentation), par exemple que le tableau doit exister, et, peut être, que la taille doit être supérieur à 0. Pour vérifier les préconditions on peut utiliser assert(), qui fera planter le programme si elles ne sont pas respectés (pas besoin d'aller plus loin, il y a une erreur de programmation).
double moyenneTableau(const int tableau[], size_t tailleTableau)
{
assert(tableau && "tableau is not optional");
assert(tailleTableau > 0 && "range-error: tailleTableau must be > 0");
return (double)sommeTableau(tableau, tailleTableau) / tailleTableau;
}
Premièrement, tu aurait dû créer un nouveau topic sans "polluer" un topique existant. Deuxièmement, pour une meilleur lecture et une meilleur compréhension utilise le bouton </> pour poster du code.
Maintenant qu'on a vu la forme on peut passer au fond:
1) Dans ton main tu fait appelle à de nombreuses fonctions qui ne sont pas déclaré et/ou définis : affiche(), moyenneTableau()...
2) Tu initialise un tableau contenant de 4 éléments avec seulement 3 éléments:
int tableau[4] = {10, 15, 3};
La quatrième valeur sera, en général 0. Je ne pense pas que ce soit ce que tu cherchais à faire.
3) D'ou ton erreur suivante tu appelle une fonction et cherche un élément de ton tableau qui n'existe pas ou qui n'est pas une valeur souhaitée.
4) Tu initialise dans ton tableau d'entier tableau2 avec des variables flottantes.
int tableau2[4]={1.2, 5.2, 8.3, 4.3};
Ceci n'occasionnera pas d'erreur de compilation ou de crash mais simplement le résultat trouvé se sera pas celui attendue. En l'occurrence ici si puisque la somme donne un nombre entier.
5) Tes fonctions sont sensé renvoyer un entier (ou un double pour moyenne tableau), elle ne renvois rien...
...
Bon j'arrête la pour le moment, je te laisse reprendre tout ça proprement...
🍊 - Étudiant - Codeur en C | Zeste de Savoir apprenez avec une communauté | Articles - ♡ Copying is an act of love.
Bonjour moi aussi j'ai une erreur que je ne trouve pas pour le même énoncé, la valeur à la fin affiché est 0. :/