Partage
  • Partager sur Facebook
  • Partager sur Twitter

Les tableaux - Problème avec moyenneTableau()

    8 octobre 2006 à 13:52:42

    Bonjour les gens :)

    J'ai repris les cours de C et j'en suis au chapitre sur les tableaux.
    J'en suis plus précisément au passage ou Matéo nous propose quelques exercices d'application sur les tableaux. Je les avais correctement réussi, mais après, je me suis dit que ça m'entraînerait plus si je le faisais en plusieurs fichiers, comme conseillé. J'ai donc créé tableaux.c et tableaux.h mais la fonction moyenneTableau() ne fonctionne pas. Voici les codes :

    main.c :
    #include <stdio.h>
    #include <stdlib.h>

    int main (int argc, const char * argv[])
    {
        long tableauOriginal[4] = {15, 8, 39, 12}, tableauCopie = {0}, choix = 0, valeurMax = 13;
           
            printf("\nQue souhaitez-vous faire avec les tableaux ?\n");
            printf("\t1. Somme des elements\n\t2. Moyenne des elements\n\t3. Copie des elements\n\t4. Intitialisation des elements\n\t5. Ordre croissant des elements\n");
            printf("Votre choix : ");
            scanf("%ld", &choix);
           
            switch (choix) // En fonction du choix, on utilise des fonctions différentes...
            {
                    case 1: // Somme des éléments
                            printf("\n**** Somme des elements du tableau : ");
                            affiche(tableauOriginal, 4);
                            printf("****\n\n");
                            printf("%ld\n", sommeTableau(tableauOriginal, 4));
                            break;
                           
                    case 2: // Moyenne des éléments
                            printf("\n**** Moyenne des elements du tableau : ");
                            affiche(tableauOriginal, 4);
                            printf("****\n\n");
                            printf("%lf\n", moyenneTableau(tableauOriginal, 4));
                            break;
                           
                    case 3: // Copie des éléments dans un autre tableau
                            copie(tableauOriginal, tableauCopie, 4);
                            break;
                           
                    case 4: // Transforme les nombres superieurs a valeurMax en 0
                            maximumTableau(tableauOriginal, 4, valeurMax);
                            break;
                           
                    case 5: // Range les nombres dans l'ordre croissant
                            ordonnerTableau(tableauOriginal, 4);
                            break;
            }
           
        return 0;
    }


    tableaux.c :
    #include "tableaux.h"

    long sommeTableau(long tableau[], long tailleTableau)
    {
            long i = 0, resultat = 0;
            for (i = 0 ; i < tailleTableau ; i++)
            {
                    resultat += tableau[i];
            }
            return resultat;
    }

    double moyenneTableau(long tableau[], long tailleTableau)
    {
            double moyenne = 0;
            moyenne = sommeTableau(tableau, tailleTableau) / tailleTableau;
            return moyenne;
    }


    tableaux.h :
    long sommeTableau(long tableau[], long tailleTableau);
    double moyenneTableau(long tableau[], long tailleTableau);
    void copie(long tableauOriginal[], long tableauCopie[], long tailleTableau);
    void maximumTableau(long tableau[], long tailleTableau, long valeurMax);
    void ordonnerTableau(long tableau[], long tailleTableau);
    void affiche(long tableau[], long tailleTableau);


    La fonction moyenneTableau() affiche 0.00000 :(
    Comment faire pour réparer ça ?

    Merci d'avance de votre aide ;)
    • Partager sur Facebook
    • Partager sur Twitter
      8 octobre 2006 à 13:55:29

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


      j'ai jamais vu const dans main... :o
      • Partager sur Facebook
      • Partager sur Twitter
      Anonyme
        8 octobre 2006 à 14:13:31

        long tableauCopie = {0};

        Ton tableau de copie est déclaré comme une simple variable long alors qu'il va devoir contenir de la place pour 4 éléments lorsque tu appelles la fonction copie dessus...

        => long tableauCopie[4]={0};

        Sinon pour le calcul de la moyenne je ne vois pas d'erreur grossière et chez moi ton code marche et affiche bien 18.000000 !

        "j'ai jamais vu const dans main...", "Lol moi aussi... "

        C'est pas parce que vous ignoriez le fonctionnement et l'utilité de const qu'il faut prétexter qu'il peut s'agir d'une erreur...

        int main(const int,const char*const*const); est parfaitement valide.
        • Partager sur Facebook
        • Partager sur Twitter
          8 octobre 2006 à 14:25:59

          Eh, on se calme :-°

          Je connaîs parfaitement le const ^^ et j'ai pas dit que c'était une erreur >_< je dis juste que je n'avais jamais vu ça ! ;)

          Et que ça ne sert pas à grands chose dans son code :-°
          • Partager sur Facebook
          • Partager sur Twitter
            8 octobre 2006 à 14:30:22

            Euh moi aussi j'intervient, je n'ai pas dit que c'est une erreur, et je connais à peu près const.
            Et c'est vrai dans son code, ça ne sert à rien.
            Mais pour tout dire, je n'ai jamais vu const dans main point barre
            • Partager sur Facebook
            • Partager sur Twitter
            Anonyme
              8 octobre 2006 à 14:48:16

              Si vous n'essayez pas de résoudre le problème posé et que vous vous contentez de dire "OLOLOL j'ai jamais vu ça !" quelle est l'utilité de votre message, si ce n'est de pourrir le forum ?

              "Je connaîs parfaitement le const et ça ne sert pas à grand chose dans son code"

              Si tu connais l'utilité de const, pourquoi dire que c'est inutile dans son code alors que justement, la déclaration const char** de argv permet de préciser a main que argv est un tableau de chaines de caractères constantes ?
              C'est un contrat qu'il impose a la fonction, elle ne doit pas modifier les chaines pointées par argv car ce n'est pas le comportement attendu.
              • Partager sur Facebook
              • Partager sur Twitter
                8 octobre 2006 à 18:17:26

                Merci à vous, j'ai corrigé le nom du tableauCopie.
                Par contre, chez moi ça affiche 0.00000 et normalement, le résultat n'est pas 18.0 mais 18.5 :o
                • Partager sur Facebook
                • Partager sur Twitter

                Les tableaux - Problème avec moyenneTableau()

                × 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.
                • Editeur
                • Markdown