Partage
  • Partager sur Facebook
  • Partager sur Twitter

Moyenne d'un tableau

Sujet résolu
    27 janvier 2008 à 22:01:16

    Salut, alors voilà j'en suit aux exercices sur les tableaux.
    J'ai fais la somme et là j'ai un petit problème sur la moyenne ça me renvoie toujours 0.0. Je vous met le code en vous précisant que ma fonctions sommeTableau fonctionne :
    1. double moyenneTableau(long tableau[], long tailleTableau)
    2. {
    3.     double moyenne=0;
    4.     long somme =0;
    5.     somme = sommeTableau(tableau,4);
    6.     moyenne = somme/4;
    7.     return moyenne;
    8. }
    • Partager sur Facebook
    • Partager sur Twitter
      27 janvier 2008 à 22:03:23

      Salut,

      Il nous faudrait ta fonction sommeTableau également.
      • Partager sur Facebook
      • Partager sur Twitter
        27 janvier 2008 à 22:05:26

        La fonction somme :

        1. long sommeTableau(long tableau[], long tailleTableau)
        2. {
        3.     long i, somme=0;
        4.     for(i=0; i < tailleTableau; i++)
        5.     {
        6.         somme=somme+tableau[i];
        7.     }
        8.     return somme;
        9. }


        et voilà ce que j'ai mis dans le main pout qu'il m'affiche la moyenne :

        1. printf("\nLa moyenne du tableau est : %lf\n", (moyenneTableau(tableau,4)));
        • Partager sur Facebook
        • Partager sur Twitter
          27 janvier 2008 à 22:22:26

          Il faudrait que tu convertisses ta somme en double (je ne sais pas si cela cause ton problème ) car tu divises un entier par un autre entier alors que moyenne est un flottant :

          Un truc que j'ai apprit aujourd'hui, les cast :

          moyenne = (double)somme/4; ceci fait la conversion de somme ( C'est bien comme cela qu'on utilise les cast si j'ai bien comprit ? ..à confirmer)
          • Partager sur Facebook
          • Partager sur Twitter
            27 janvier 2008 à 22:24:14

            Essais de diviser par 4.0 plutot que 4.
            • Partager sur Facebook
            • Partager sur Twitter
              27 janvier 2008 à 22:27:31

              non c'est pas ça j'avais déjà essayé !
              D'ailleurs je sais pas si je dois le laissé ou pas ? Dans certains langage on doit forcer les type et dans d'autres non.
              • Partager sur Facebook
              • Partager sur Twitter
                27 janvier 2008 à 22:33:34

                Ce serait bien si tu donnais ton code complet svp.
                • Partager sur Facebook
                • Partager sur Twitter
                  27 janvier 2008 à 22:40:05

                  Ba après ya plus qu ele main :

                  1. #include <stdio.h>
                  2. #include <stdlib.h>
                  3. int main(int argc, char *argv[])
                  4. {
                  5.     long tableau[4] = {10, 15, 3}, i = 0;
                  6.     printf("\nLa somme du tableau est : %ld \n", (sommeTableau(tableau,4)));
                  7.     printf("\nLa moyenne du tableau est : %lf\n", (moyenneTableau(tableau,4)));
                  8.     return 0;
                  9. }


                  • Partager sur Facebook
                  • Partager sur Twitter
                    27 janvier 2008 à 22:43:46

                    Ok, cherches pas plus loin :

                    1. long tableau[4] = {10, 15, 3};

                    Il manquerait pas une valeure dans ton tableau ?...
                    • Partager sur Facebook
                    • Partager sur Twitter
                      27 janvier 2008 à 22:45:48

                      bon sa 4eme valeur est nul = 0 ..non ?
                      • Partager sur Facebook
                      • Partager sur Twitter
                        27 janvier 2008 à 22:50:34

                        si si la dernière c'est 0 ! quand on marque rien ça vaut 0 ;)
                        • Partager sur Facebook
                        • Partager sur Twitter
                          27 janvier 2008 à 22:55:37

                          Pas forcément. Sa dépend du compilateur je crois... Essayes de rajouter 0 à la main.
                          • Partager sur Facebook
                          • Partager sur Twitter
                            27 janvier 2008 à 22:59:19

                            Non c'est pas ça.
                            Le probleme vient uniquement de ma fonction moyenne masi bon c'est bizarre je vois pas c'est quoi !
                            • Partager sur Facebook
                            • Partager sur Twitter
                              27 janvier 2008 à 23:00:32

                              Comme la division entiere de 28 par 4 vaut 7 et que la quatrieme case du tableau vaut zero, alors ce code devrait fonctionner !! :p
                              Oui bon, malgre ces deux erreurs potentielles, ca marche bien chez moi. ^^
                              • Partager sur Facebook
                              • Partager sur Twitter
                                27 janvier 2008 à 23:04:14

                                Essayes de ne pas initialiser ta variable moyenne peut être.
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  27 janvier 2008 à 23:04:38

                                  La moyenne marche chez toi Frava ????
                                  ba montre le code lol

                                  non mais enfait j'ai vraiment tout essayé donc dite moi un truc seulement si ça marche chez vous, donc oui j'ai deja essayé Vince33 mais ça met 0.0 aussi.
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    27 janvier 2008 à 23:09:22

                                    heu, "mon" code est juste un copier/coller du tien.
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      27 janvier 2008 à 23:11:18

                                      Oue ben ça doit être ton compilateur.
                                      Ou alors tu n'éxécutes pas le bon éxécutable...
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        27 janvier 2008 à 23:14:53

                                        oula je comprends pas là, dites moi pas que chez vous vous avez "La moyenne est de : 7" sas changer mon code !

                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          27 janvier 2008 à 23:22:34

                                          Citation : Vince33

                                          Pas forcément. Sa dépend du compilateur je crois...


                                          Non. C'est standard.

                                          @Outfit

                                          Avec les éléments de ton code correctement placés dans le code source :
                                          1. #include <stdio.h>
                                          2. #include <stdlib.h>
                                          3. long sommeTableau (long tableau[], long tailleTableau)
                                          4. {
                                          5.    long i, somme = 0;
                                          6.    for (i = 0; i < tailleTableau; i++)
                                          7.    {
                                          8.       somme = somme + tableau[i];
                                          9.    }
                                          10.    return somme;
                                          11. }
                                          12. double moyenneTableau (long tableau[], long tailleTableau)
                                          13. {
                                          14.    double moyenne = 0;
                                          15.    long somme = 0;
                                          16.    somme = sommeTableau (tableau, 4);
                                          17.    moyenne = somme / 4;
                                          18.    return moyenne;
                                          19. }
                                          20. int main (int argc, char *argv[])
                                          21. {
                                          22.    long tableau[4] = { 10, 15, 3 }, i = 0;
                                          23.    printf ("\nLa somme du tableau est : %ld \n", (sommeTableau (tableau, 4)));
                                          24.    printf ("\nLa moyenne du tableau est : %lf\n",
                                          25.            (moyenneTableau (tableau, 4)));
                                          26.    return 0;
                                          27. }

                                          J'obtiens :
                                          La somme du tableau est : 28
                                          La moyenne du tableau est : 7.000000
                                          Press ENTER to continue.

                                          ce qui est correct.

                                          Citation : Outfit

                                          oula je comprends pas là, dites moi pas que chez vous vous avez "La moyenne est de : 7" sas changer mon code !


                                          Evidemment, comme malgré nos demandes, tu n'as toujours posté l'intégralité de ton code, rien ne dit que le tien fonctionne...

                                          Cependant, un réglage correct du compilateur montre des défauts :
                                          Project   : Forums
                                          Compiler  : GNU GCC Compiler (called directly)
                                          Directory : C:\dev\forums\
                                          --------------------------------------------------------------------------------
                                          Switching to target: default
                                          Compiling: main.c
                                          main.c:15: warning: unused parameter 'tailleTableau'
                                          main.c: In function `main':
                                          main.c:29: warning: unused variable `i'
                                          main.c: At top level:
                                          main.c:27: warning: unused parameter 'argc'
                                          main.c:27: warning: unused parameter 'argv'
                                          Linking console executable: console.exe
                                          Process terminated with status 0 (0 minutes, 0 seconds)
                                          0 errors, 4 warnings

                                          De plus, la division est entière, ce qui est incorrect.

                                          Je propose donc ceci :
                                          1. #include <stdio.h>
                                          2. #include <stdlib.h>
                                          3. long sommeTableau (long tableau[], long tailleTableau)
                                          4. {
                                          5.    long i, somme = 0;
                                          6.    for (i = 0; i < tailleTableau; i++)
                                          7.    {
                                          8.       somme = somme + tableau[i];
                                          9.    }
                                          10.    return somme;
                                          11. }
                                          12. double moyenneTableau (long tableau[], long tailleTableau)
                                          13. {
                                          14.    double moyenne = 0;
                                          15.    double somme = 0;
                                          16.    somme = sommeTableau (tableau, tailleTableau);
                                          17.    moyenne = somme / tailleTableau;
                                          18.    return moyenne;
                                          19. }
                                          20. int main (void)
                                          21. {
                                          22.    long tableau[4] = { 10, 15, 3, 1 };
                                          23.    printf ("\nLa somme du tableau est : %ld \n", (sommeTableau (tableau, 4)));
                                          24.    printf ("\nLa moyenne du tableau est : %g\n",
                                          25.            (moyenneTableau (tableau, 4)));
                                          26.    return 0;
                                          27. }

                                          qui donne :
                                          La somme du tableau est : 29
                                          La moyenne du tableau est : 7.25
                                          Press ENTER to continue.
                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                          Music only !
                                            27 janvier 2008 à 23:27:57

                                            Avec ton code exact, j'ai: La moyenne du tableau est 7.000000.

                                            Ah, ces journées ou notre compilo va mal ^^

                                            Essaie de mettre 4.0, ça c'est nécessaire pour fonctionner correctement à tous les coups.

                                            Et, si ton compilateur fonctionnait avant, alors redémarre ton PC ?
                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                              27 janvier 2008 à 23:37:05

                                              ok les gars vous connaissez pas la meilleure ?!

                                              ça marche avec Dev-C++ mais pas avec CodeBlock... dire que je me casse la tête depuis le début pour rien arrggg !

                                              Merci ^^
                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                                27 janvier 2008 à 23:39:22

                                                Citation : Ouftit

                                                ok les gars vous connaissez pas la meilleure ?!

                                                ça marche avec Dev-C++ mais pas avec CodeBlock... dire que je me casse la tête depuis le début pour rien arrggg !


                                                Chez moi, j'ai Code::Blocks 1.0 rc2, et ça fonctionne. Se méfier des "Nightly Builds", ils ne sont pas validés...

                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                Music only !
                                                  27 janvier 2008 à 23:39:33

                                                  Citation : Ouftit

                                                  ok les gars vous connaissez pas la meilleure ?!

                                                  ça marche avec Dev-C++ mais pas avec CodeBlock... dire que je me casse la tête depuis le début pour rien arrggg !

                                                  Merci ^^



                                                  g déja eu le mmm bug mais souvent dans l'autre sens :D:D
                                                  • Partager sur Facebook
                                                  • Partager sur Twitter
                                                    27 janvier 2008 à 23:42:12

                                                    Ah non c'est pas ça l'erreur enfait ...
                                                    avec Dev j'ai tout mis dans le fichier main.c mais quand je mets mes fonctions dans un fichier fonctions.c et les prototypes dans fonctions.h ma moeynne redevient 0.000 ...

                                                    Je dois avoir un probleme d"#include" ....

                                                    Donc si quelqu'un arrive à le faire fonctionner avec les fonctions dans un autre fichier qu'il me fasse signe.
                                                    Merci
                                                    • Partager sur Facebook
                                                    • Partager sur Twitter
                                                      28 janvier 2008 à 0:18:37

                                                      En utilisant Code::blocks SVN 4845, aucun problème en séparant en fonctions, ça marche du premier coup.
                                                      Main.c
                                                      1. #include <stdio.h>
                                                      2. #include <stdlib.h>
                                                      3. #include "fonctions.h"
                                                      4. int main(int argc, char *argv[])
                                                      5. {
                                                      6.     long tableau[4] = {10, 15, 3}, i = 0;
                                                      7.     printf("\nLa somme du tableau est : %ld \n", (sommeTableau(tableau,4)));
                                                      8.     printf("\nLa moyenne du tableau est : %lf\n", (moyenneTableau(tableau,4)));
                                                      9.     return 0;
                                                      10. }

                                                      fonctions.c
                                                      1. #include "fonctions.h"
                                                      2. long sommeTableau(long tableau[], long tailleTableau)
                                                      3. {
                                                      4.     long i, somme=0;
                                                      5.     for(i=0; i < tailleTableau; i++)
                                                      6.     {
                                                      7.         somme=somme+tableau[i]; /* préférer somme += tableau[i] */
                                                      8.     }
                                                      9.     return somme;
                                                      10. }
                                                      11. double moyenneTableau(long tableau[], long tailleTableau)
                                                      12. {
                                                      13.     double moyenne=0;
                                                      14.     long somme =0;
                                                      15.     somme = sommeTableau(tableau,4);
                                                      16.     moyenne = somme/4; /*préférer somme/4.0*/
                                                      17.     return moyenne;
                                                      18. }

                                                      fonctions.h
                                                      1. #ifndef FONCTIONS_H_INCLUDED
                                                      2. #define FONCTIONS_H_INCLUDED
                                                      3. long sommeTableau(long[],long);
                                                      4. double moyenneTableau(long[],long);
                                                      5. #endif
                                                      • Partager sur Facebook
                                                      • Partager sur Twitter
                                                        28 janvier 2008 à 9:15:34

                                                        Merci mykeys ça marche !
                                                        Mais je ne connaissais pas les
                                                        #ifndef FONCTIONS_H_INCLUDED
                                                        #define FONCTIONS_H_INCLUDED
                                                        à mettre dans le fichier.h, cela dit ça marche sans j'ai essayé!

                                                        Donc mon erreur c'est que j'avais oublié de mettre #include "fonctions.h" dans le main.c d'ailleurs la fonction somme marche sans que je le mette c'est bizarre.

                                                        Bref je le ferai maintenant par contre si tu peux m'expliquer a quoi servent les trucs que t'as mis dans le .h ce serait sympa.
                                                        • Partager sur Facebook
                                                        • Partager sur Twitter
                                                          28 janvier 2008 à 9:58:02

                                                          Citation : Ouftit

                                                          Merci mykeys ça marche !
                                                          Mais je ne connaissais pas les
                                                          #ifndef FONCTIONS_H_INCLUDED
                                                          #define FONCTIONS_H_INCLUDED
                                                          à mettre dans le fichier.h, cela dit ça marche sans j'ai essayé!

                                                          Donc mon erreur c'est que j'avais oublié de mettre #include "fonctions.h" dans le main.c d'ailleurs la fonction somme marche sans que je le mette c'est bizarre.

                                                          Bref je le ferai maintenant par contre si tu peux m'expliquer a quoi servent les trucs que t'as mis dans le .h ce serait sympa.


                                                          Tout est expliqué dans le cours de M@teo au chapitre 'Programmation modulaire' (ou 'Compilation séparée', je ne sais plus).

                                                          Appeler une fonction sans prototype invoque un comportement indéterminé. Tout peut arriver, y compris un comprtement qui parait correct, ce qui rend ce bug extrêmement dangereux qui qui fait que le langage C n'est pas un langage de débutant en programmation.

                                                          http://mapage.noos.fr/emdel/notes.htm#ub
                                                          • Partager sur Facebook
                                                          • Partager sur Twitter
                                                          Music only !
                                                            28 janvier 2008 à 10:23:09

                                                            Non justement ce qu'a mis mykeys dans son fichier .h n'est pas marqué dans le cours sinon je ne demanderai pas je sais lire quand meme ^^

                                                            La preuve ça marche sans, Mateo ne met rien non plus dans ses .h à part les prototypes bien evidement moi ce que je veux ce sont des explications sur les directives de préprocesseur qu'à utiliser myckeys ça peut peut etre me servir pour plus tard :D
                                                            • Partager sur Facebook
                                                            • Partager sur Twitter
                                                              28 janvier 2008 à 16:40:15

                                                              Citation : Ouftit

                                                              Non justement ce qu'a mis mykeys dans son fichier .h n'est pas marqué dans le cours sinon je ne demanderai pas je sais lire quand meme ^^


                                                              Se méfier des affirmations non vérifiées...

                                                              http://www.siteduzero.com/tuto-3-4200-1-le-preprocesseur.html#ss_part_2

                                                              #ifndef pour éviter les inclusions infinies


                                                              Citation : Pas de titre


                                                              La preuve ça marche sans, Mateo ne met rien non plus dans ses .h à part les prototypes bien evidement moi ce que je veux ce sont des explications sur les directives de préprocesseur qu'à utiliser myckeys ça peut peut etre me servir pour plus tard


                                                              http://mapage.noos.fr/emdel/codage.htm#organiser_source
                                                              http://mapage.noos.fr/emdel/codage.htm#organiser
                                                              • Partager sur Facebook
                                                              • Partager sur Twitter
                                                              Music only !

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