Partage
  • Partager sur Facebook
  • Partager sur Twitter

Fonction qui renvoie la moyenne des valeurs

Sujet résolu
20 août 2010 à 14:49:00

Bonjour à tous,

je suis en train d'effectuer le 2ème exercice concernant les tableaux du livre SiteDuZero.

Voici l'énoncé :

Créer une fonction moyenneTableau qui calcule et renvoie la moyenne des valeurs.
Prototype :

double moyenneTableau(int tableau[], int tailleTableau);


Voici ce que j'ai essayé de faire :

double moyenneTableau(int tableau[], int tailleTableau);

int main(int argc, char *argv[])
{
    double tableau[4] = {10, 20, 30, 40};

    
    moyenneTableau(tableau,4);
    printf("La moyenne du tableau est de : %d",moyenneTableau(tableau/4));

    return 0;
}

double moyenneTableau(int tableau[], int tailleTableau);
{

double moyenne = 0; int i =0;

    for (i=0; i < tailleTableau; i++)
    {
       moyenne = (tableau[0] + tableau[1] + tableau[2] + tableau[3]) / 4;
    }
return moyenne;
}


Mais malheureusement j'obtiens des erreurs, quelqu'un pourrait me dire ce qui cloche s'il vous plaît?

Merci
  • Partager sur Facebook
  • Partager sur Twitter
20 août 2010 à 14:53:26

Edit:Non je me suis trompé
  • Partager sur Facebook
  • Partager sur Twitter
20 août 2010 à 14:55:15

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
  • Partager sur Facebook
  • Partager sur Twitter
20 août 2010 à 15:27:21

Analysons tout cela.

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.
  • Partager sur Facebook
  • Partager sur Twitter

🍊 - Étudiant - Codeur en C | Zeste de Savoir apprenez avec une communauté | Articles  - ♡ Copying is an act of love.

20 août 2010 à 21:03:27

Merci à vous pour votre aide cela m'a bien aidé.

Sincères salutations.
  • Partager sur Facebook
  • Partager sur Twitter
1 septembre 2010 à 15:30:13

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 :D

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;
}



merciiii^^
  • Partager sur Facebook
  • Partager sur Twitter
1 septembre 2010 à 15:37:44

Tu as rajouté un ; de trop

double moyenneTableau(int tableau[], int tailleTableau);
{
  • Partager sur Facebook
  • Partager sur Twitter
3 janvier 2015 à 10:22:35

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.
  • Partager sur Facebook
  • Partager sur Twitter
3 janvier 2015 à 11:19:24

laulnz93 a écrit:

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 +=.
  • Partager sur Facebook
  • Partager sur Twitter
3 janvier 2015 à 11:31:57

Très clair, merci bien!
  • Partager sur Facebook
  • Partager sur Twitter
5 avril 2015 à 11:27:58

voici mon code qui fonctionne si quelqu'un en a besoin :

#include<stdlib.h>
#include<stdio.h>

double moyenneTableau(int tableau[], int tailleTableau);

int main(int argc, char *argv[])
{
    int tableauTest[4] = {4, 6, 8, 2};

    moyenneTableau(tableauTest, 4);

    return 0;
}

double moyenneTableau(int tableau[], int tailleTableau)
{
    int i = 0, somme = 0;
    double moyenne = 0;

    for(i = 0; i < tailleTableau; i++)
    {
        somme = somme + tableau[i];
    }

    moyenne = somme / i;
    printf("%f\n", moyenne);
}
  • Partager sur Facebook
  • Partager sur Twitter
5 avril 2015 à 13:04:20

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:

double moyenneTableau(int tableau[], int tailleTableau)
{
    return (double)sommeTableau(tableau, tailleTableau) / tailleTableau;
}

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

double moyenneTableau(const int tableau[], size_t tailleTableau)
{
    return (double)sommeTableau(tableau, tailleTableau) / tailleTableau;
}

 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;
}

-
Edité par Dichotoman 5 avril 2015 à 13:29:07

  • Partager sur Facebook
  • Partager sur Twitter
16 mai 2015 à 13:48:16

#include <stdio.h>
#include <stdlib.h>

double moyenneTableau(int tableau[], int tailleTableau);

int main(int argc, char *argv[])
{
    int  tableau[4]={1,2,3,4};
    moyenneTableau(tableau,4);
    printf("La moyenne est %d\n", moyenneTableau(tableau, 4));
    return 0;
}

double moyenneTableau(int *tableau, int tailleTableau)
{
    int moyenne =0, i=0;
    for (i=0; i<tailleTableau; i++)
    {
        moyenne += (double)tableau[i];


    }

    return moyenne/tailleTableau;
}
Bonjour moi aussi j'ai une erreur que je ne trouve pas pour le même énoncé, la valeur à la fin affiché est 0. :/
  • Partager sur Facebook
  • Partager sur Twitter
3 août 2017 à 10:01:53

Bonjour, mon code m'affiche 1.#QNANO, vous pouvez m'aider ?

#include <stdio.h>

#include <stdlib.h>

double moyenneTableau(int tableau[], int tailleTableau);

int main(int argc, char *argv[])

{

    int tableau[4] = {10, 15, 3};

    int tableau2[4]={1.2,5.2,8.3,4.3};

    affiche(tableau, 4);

    sommeTableau(tableau,4);

    moyenneTableau(tableau,4);

    return 0;

}

int sommeTableau(int tableau[], int tailleTableau)

{

    int somme=0;

    int i;

    for(i=0;i<tailleTableau;i++)

    {

        somme=somme+tableau[i];

    }

    printf("%d\n",somme);

}

  • Partager sur Facebook
  • Partager sur Twitter
3 août 2017 à 11:22:13

Bonjour EvanCao1,

Bon... Il y a du boulot...

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

-
Edité par LChalam 3 août 2017 à 12:01:43

  • Partager sur Facebook
  • Partager sur Twitter
3 octobre 2017 à 16:46:06

Bonjour, svp j'aimerais savoir comment afficher un tableau s'il est pair ou impair. Merci.
  • Partager sur Facebook
  • Partager sur Twitter
22 novembre 2017 à 22:52:02

bsr j' ai essaye de faire un programme ou il ya affichage du tableau somme et moynne ( pour les exercices 1 2 et 3) vos avis et merci

//Directives de préprocesseur

#include <stdio.h>

#include <stdlib.h>

// Prototype de la fonction d'affichage

void affiche(int *tableau, int tailleTableau);

//Prototype de la fonction somme

int sommeTableau(int tableau[], int tailleTableau);

//prototype moyenne

double moyenneTableau(int tableau[], int tailleTableau);

int main()

{

    int tableau[4] = {10, 20, 30, 40};

    int somme;

    somme = sommeTableau(tableau, 4);

    double moyenne;

    moyenne = moyenneTableau(tableau, 4);

    // On affiche le contenu du tableau

    affiche(tableau, 4);

    //on affiche la somme

    printf("La somme des valeurs du tableau est %d\n\n", somme);

    //on affiche la moyenne

    printf("la moyenne des valeurs du tableau est %f\n\n", moyenne);

    return 0;

}

// boucle affichage

void affiche(int *tableau, int tailleTableau)

{

    int i;

    for (i = 0 ; i < tailleTableau ; i++)

    {

        printf("%d\n", tableau[i]);

    }

}

//boucle somme

int sommeTableau(int tableau[], int tailleTableau)

{

    int somme = 0, i =0;

    for (i=0; i<tailleTableau; i++)

    {

        somme = somme + tableau[i];

    }

    return somme;

}

// boucle moyenne

double moyenneTableau(int tableau[], int tailleTableau)

{

    double moyenne = 0, i = 0;

    for (i=0; i<tailleTableau; i++)

    {

        moyenne = sommeTableau(tableau, 4) / 4;

    }

    return moyenne;

}

  • Partager sur Facebook
  • Partager sur Twitter
22 novembre 2017 à 22:56:43

1) tu crées ton propre sujet.

2) tu utilises le bouton </> du forum pour poster ton code.

  • Partager sur Facebook
  • Partager sur Twitter
7 janvier 2018 à 17:05:13

#include <stdio.h>
#include <stdlib.h>
double moyenneTableau(int tableau[],int taille);
int main()
{
    int tableau[4]={4,10,14,2};
    int taille = 4;
    printf("la moyenne des comp de tableau est: %f\n",moyenneTableau(tableau,taille));
    return 0;
}
double moyenneTableau(int tableau[], int taille)
{
    double s = 0 ;
    int i = 0;
    double m = 0;
    for(i=0;i<taille;i++)
    {
        s = s + tableau[i];
    }
    m = s / taille;
    return  m;
}
c est le vrai coode :D
  • Partager sur Facebook
  • Partager sur Twitter
19 janvier 2019 à 20:35:07

double moyenneTableau(int tableau[], int tailleTableau);

int main(int argc, char *argv[])
{
    int  tableau[4]={1,2,3,4};
    moyenneTableau(tableau,4);
    printf("La moyenne est %f\n", moyenneTableau(tableau, 4));
    return 0;
}

double moyenneTableau(int *tableau, int tailleTableau)
{
    int moyenne =0, i=0;
    for (i=0; i<tailleTableau; i++)
    {
        moyenne += (double)tableau[i];


    }

    return moyenne/tailleTableau;
}

-
Edité par mousamassau 19 janvier 2019 à 20:52:05

  • Partager sur Facebook
  • Partager sur Twitter