Partage
  • Partager sur Facebook
  • Partager sur Twitter

[c] Le cour sur les tableaux..

Eh oui, encore et toujours... Pourtant, mon code semble juste...

Sujet résolu
    18 avril 2006 à 15:09:04

    Hello, je suis sur que vous en avez raz le bol de réentendre 150 fois les meme questions...

    Mais le system de recherche etant desactivé (google, c'est bien mais c'est pas encore ça, les pages n'etants pas forcement toutes référencée) je n'ai pas trouvé mon bonheur dans les 10 dernières pages de sujet...
    Enfin, j'ai trouvé d'autre post correspondant dans les quels il y avait les bonnes reponses ! Et c'est bien ça mon probleme mon code semble bon, mais (pour la moyenne par exemple) le resultat reste invariablement 0 !

    A noter que j'ai eu exactement le meme probleme pour la somme (code bon !) mais qui me donnait toujours 0 ! En creant un nouveau projet avec exactement le meme code cela refonctionnait normalement..

    J'ai essayer plusieur methode differentes pour coder la moyenne (comme il faut de toute façon passer par une somme) j'ai copier coller le code de la somme puis divisé le relustat par le nombre d'entrées du tableau, puis j'ai essayé d'incorporer directement la fonction somme() divisé par le nombre d'entrées, j'ai essayé de remplacer le tout par les chiffres correspondant ^^ mais rien a faire !

    Alors voici mon code, peut-etre y a-t-il tout de meme une erreur :

    main.c


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

    int main(int argc, char *argv[])
    {
      long tableau[6] = {120, 33, 44, 56, 229, 7};
      long taille = 6;
     
      printf ("\n\t\t\t== Petits tests sur un tableau en C ==\n\n\t\t\t");
      affiche(tableau, taille);
     
      printf ("\tLa somme des valeurs du tableaux : %ld\n", somme(tableau, taille));
      printf ("\tLa moyenne des valeurs du tableaux : %ld\n", moyenne(tableau, taille));
      system("PAUSE");     
      return 0;
    }


    tableaux.c


    void affiche(long tableau[], long taille)
    {
         long i = 0;
      for (i = 0 ; i < taille - 1 ; i++)
          {
                printf("%ld  |  ", tableau[i]);
          }
      for (i = taille - 1 ; i < taille ; i++)
          {
               printf("%ld", tableau[i]);
          }
      printf ("\n\n");
    }


    long somme(long tableau[], long taille)
    {
         long a = 0, i = 0;
         for (i = 0 ; i < taille ; i++)
             {
             a = a + tableau[i];
             }
         return a;
    }

    double moyenne(long tableau[], long taille)
    {
        double moyenne = somme(tableau, taille)/taille;
        return moyenne;
    }


    tableaux.h


    void affiche(long, long);
    // affiche les donnees du tableaux de façon ordonnées

    long somme(long, long);
    // additionne toutes les cases du tableau

    double moyenne(long, long);
    //permet de faire une moyenne des valeurs du tableau


    et le final dans la console :
    Image utilisateur

    J'espère ne pas vous avoir barbé avec tout mon blabla...

    Mais j'aimerais savoir ce que je dois faire, si j'ai fais une erreur, si je ferais mieux d'aller me pendre, ou si vous me conseillez de changer d'IDE...

    PS : je suis sous Dev-C++ v.4.9.9.2 et il ne me donne aucune erreur de compilation...

    • Partager sur Facebook
    • Partager sur Twitter
      18 avril 2006 à 16:03:05

      Citation : barbarius

      PS : je suis sous Dev-C++ v.4.9.9.2 et il ne me donne aucune erreur de compilation...


      Alors le code que tu as posté n'est pas complet...

      Compiling: main.c
      In file included from main.c:4:
      tableaux.h:8:53: warning: no newline at end of file
      main.c: In function `main_':
      main.c:12: warning: passing arg 1 of `affiche' makes integer from pointer without a cast
      main.c:14: warning: passing arg 1 of `somme' makes integer from pointer without a cast
      main.c:15: warning: passing arg 1 of `moyenne' makes integer from pointer without a cast
      main.c:15: warning: long int format, double arg (arg 2)
      Compiling: tableaux.c
      tableaux.c:2: warning: no previous prototype for 'affiche'
      tableaux.c: In function `affiche':
      tableaux.c:6: error: implicit declaration of function `printf'
      tableaux.c:6: warning: nested extern declaration of `printf'
      <internal>:0: warning: redundant redeclaration of 'printf'
      tableaux.c:10: warning: nested extern declaration of `printf'
      <internal>:0: warning: redundant redeclaration of 'printf'
      tableaux.c:12: warning: nested extern declaration of `printf'
      <internal>:0: warning: redundant redeclaration of 'printf'
      tableaux.c: At top level:
      tableaux.c:17: warning: no previous prototype for 'somme'
      tableaux.c:27: warning: no previous prototype for 'moyenne'
      tableaux.c: In function `moyenne':
      tableaux.c:28: warning: declaration of 'moyenne' shadows a global declaration
      tableaux.c:27: warning: shadowed declaration is here
      Process terminated with status 1 (0 minutes, 0 seconds)

      • Regle de bonne conception : "dans un fichier .c définissant des fonctions, inclure le .h contenant les prototypes". Ca permet de vérifier la cohérence. Ici, il y a des erreurs...
      • Les prototypes sont très faux...
      • moyenne() : la division est entière (long/long). Il faut transtyper un des éléments en double
      • L'affichage d'un double avec printf() se fait avec "%f"

      Après correction :


      == Petits tests sur un tableau en C ==

      120 | 33 | 44 | 56 | 229 | 7

      La somme des valeurs du tableaux : 489
      La moyenne des valeurs du tableaux : 81.500000

      • Partager sur Facebook
      • Partager sur Twitter
      Music only !
        18 avril 2006 à 16:13:33

        Bonjour, -ed-, dejà : merci d'avoir repondu ^^

        Je suis certain que tu as raison, mais je ne comprend pas très bien les 'alertes' (je ne sais pas comment appeler ça) que tu m'as donné, l'anglais me pose un petit probleme, mais meme si j'en saisi la traduction française je dois avouer que je n'y comprend rien...

        Citation : -ed-

        Alors le code que tu as posté n'est pas complet...



        Que me manque-t-il ?
        merci d'avance..
        • Partager sur Facebook
        • Partager sur Twitter
          18 avril 2006 à 16:25:34

          Citation : barbarius

          je ne comprend pas très bien les 'alertes' (je ne sais pas comment appeler ça) que tu m'as donné, l'anglais me pose un petit probleme,


          Il est quasiment impossible de faire de l'informatique sans savoir lire l'anglais. Je n'arrive pas à comprendre que le niveau d'anglais soit si faible. de plus, en France, l'enseignement de cette langue est obligatoire. Je ne comprend pas comment on peut y echapper. Et si l'enseignement n'est pas à la hauteur, la moindre des choses est de compléter par soi-même...

          Citation : barbarius


          mais meme si j'en saisi la traduction française je dois avouer que je n'y comprend rien...


          Comprendre le sens des messages du compilateur fait partie du métier d'informaticien... Il faut se creuser la tête un peu plus et si besoin est, poser des questions précises...

          Citation : barbarius


          Citation : -ed-

          Alors le code que tu as posté n'est pas complet...


          Que me manque-t-il ?


          Dans tableaux.c : <stdio.h> pour printf(). C'est pas évident en lisant ça ?
          tableaux.c:6: error: implicit declaration of function `printf'

          • Partager sur Facebook
          • Partager sur Twitter
          Music only !
            18 avril 2006 à 16:37:05

            Euh, non, ça ne me saute pas aux yeux... Ca n'a rien d'une evidence pour moi, si je suis les cours c'est justement pour arriver à un niveau me permettant d'y voir plus clair, le niveau français en langue anglais est le moins bon de toute l'europe, alors je te sais grés de tes grande idées, mais on apprend en général PAS ce que veut dire "redundant redeclaration" en classe de première...

            Un jour peut-etre mais pas encore, de plus probablement plus des 3 quarts des jeunes français qui ont mon niveau d'etude (première, equivalent de 16 ans) ne savent et ne sauront probablement JAMAIS ce que la traduction français veut dire...

            Je sais que je suis assez mal placé pour faire la morale mais je croyais que j'etais sur un forum pour les zeros, hors dans ce domaine je suis un zero !

            En tout cas, merci pour l'info...
            je prend note !

            Encore merci..
            • Partager sur Facebook
            • Partager sur Twitter

            [c] Le cour sur les tableaux..

            × 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