IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

aide sur les headers


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Juin 2007
    Messages
    81
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 81
    Par défaut aide sur les headers
    bonjour tous le monde
    j'ai fait un petit programme pour m'entraine sur les tableaux.
    mon projet contuent deux fichiers
    l'un c'est tableau.h et l'autre c'est tableau.c .
    d'apres ma connaissance le headers contients seulemnt les prototypes, est ce que je devrais faire seulement les proto types dans cette fichiers comme ça ?
    tableau.h :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    void affiche(long tableau[], long tailleTableau);
    long sommeTableau(long tableau [], long taille);
    double moyenneTableau(long tableau[],long taille);
    tableau.c :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    #include <stdio.h>
    #include <stdlib.h>
    #include "tableau.h"
    long s=0,m=0;
    void affiche(long tableau[], long tailleTableau);
    long sommeTableau(long tableau [], long taille);
    double moyenneTableau(long tableau[],long taille);
    int main(int argc, char *argv[])
    {
       long tableau[4] = {10, 15, 3}, i = 0;
     
        affiche(tableau, 4);
        sommeTableau( tableau , 4 );
    printf("sommetableau=%ld\n",s);
     moyenneTableau(tableau,4);
        printf("la moyenne = %ld\n",m);
      system("PAUSE");	
      return 0;
    }
    void affiche(long tableau[], long tailleTableau)
    {
        long i;
     
        for (i = 0 ; i < tailleTableau ; i++)
        {
            printf("%ld\n", tableau[i]);
        }
    }
    long sommeTableau(long tableau [], long taille)
    {
         long i=0;
         for(i=0;i<taille;i++)
         s=s+tableau[i];
     
         }
    double moyenneTableau(long tableau [],long taille)
    {
         long i=0,s=0;
         for(i=0;i<taille;i++)
         {
                              s=s+tableau[i];
                              }
                              m=s/taille;
                              return m;
                              }
    se programme ne veut pas complier.
    vous pouvez me dire comment je vais definir le headers pour ce programme et aussi les erreurs ? avec une explication .
    merci à vous tous.

    [-mod- Merci de lire les regles du forum. ]

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    865
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 865
    Par défaut
    Personnellement, ça compile très bien chez moi, à quelques warnings près.
    Par contre, tu devrais supprimer les trois lignes avant main() qui sont en fait dans ton header et mettre main dans un troisième fichier histoire que l'header serve vraiment à quelque chose et ne pas utiliser de variables globales (recupère les valeurs retournées par tes fonctions quand tu n'as pas oublié de la retourner cf. sommeTableau).
    Quelle erreur as-tu ?

  3. #3
    Modérateur
    Avatar de ToTo13
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2006
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 793
    Par défaut
    Bonjour,

    je n'ai pas fait tourné ton code vu que quelqu'un l'a déjà fait et que ça marche.

    Pour ce qui est du header, je te conseillerai de mettre les prototypes dedans, mais de la façon suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    #ifndef _TABLEAU
    #define _TABLEAU
     
    void affiche(long tableau[], long tailleTableau);
    long sommeTableau(long tableau [], long taille);
    double moyenneTableau(long tableau[],long taille);
     
    #endif
    Ca te sera utile si ton programme comporte plusieurs fichiers sources, ça devient rapidement le cas quand on programme.
    Cette façon évitera au compilateur de compiler plusieurs fois ton header s'il est appelé dans plusieurs fichiers sources.
    Consignes aux jeunes padawans : une image vaut 1000 mots !
    - Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe, mettre les ACCENTS et les BALISES) => ECRIRE clairement et en Français tu DOIS.
    - Le côté obscur je sens dans le MP => Tous tes MPs je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci)
    - ton poste tu dois marquer quand la bonne réponse tu as obtenu.

  4. #4
    Membre Expert
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Par défaut
    Citation Envoyé par ToTo13
    #ifndef _TABLEAU
    #define _TABLEAU
    Les identifieurs commencant par _ sont reserves a l'implementation. Utiliser plutot H_TABLEAU.
    Cette façon évitera au compilateur de compiler plusieurs fois ton header s'il est appelé dans plusieurs fichiers sources.
    Ce n'est pas le probleme. La garde que tu indiques evite d'inclure plusieurs fois le meme header lorsque le meme fichier source (unite de compilation) est compile.

  5. #5
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    int main(int argc, char *argv[])
    {
       long tableau[4] = {10, 15, 3},...
    Tu n'as pas (peut être volontairement) initialisé le dernier élément qui en conséquence sera initialisé à la valeur par défaut (0)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    long sommeTableau(long tableau [], long taille)
    {
         long i=0;
         for(i=0;i<taille;i++)
         s=s+tableau[i];     
         }
    La fonction doit retourner un long ce qu'elle ne fait pas. s devrait être une variable locale initialisée à 0 (d'ailleurs, il n'y a aucune raison d'avoir des variables globales ici) et le fonction se terminer par return s;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    double moyenneTableau(long tableau [],long taille)
    {
         long i=0,s=0;
         for(i=0;i<taille;i++)
         {
              s=s+tableau[i];
          }
          m=s/taille;
          return m;
     }
    - m devrait être locale et main recueillir la valeur retournée par la fonction pour en faire ce que bon lui semble
    - la division entre s et taille est une division entière et le résultat sera le quotient donc faux
    - utilise les fonctions que tu as écrites. Ce n'est pas la peinr de dupliquer le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    double moyenneTableau(long tableau [],long taille)
    {
          return (double)sommeTableau(tableau,taille)/taille;
     }

  6. #6
    Membre émérite Avatar de valefor
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    711
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 711
    Par défaut
    Et si ça ne compile pas, que tu veux qu'on t'aide, il faut donner les messages d'erreur que tu obtiens stp.

  7. #7
    Membre confirmé
    Inscrit en
    Juin 2007
    Messages
    81
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 81
    Par défaut
    bonjours
    merci pour tous
    au dessous de directives preprocesseur {#include <stdio.h> et
    #include <stdlib.h> } j'ai mis #include "tableau.h" pour inserer les prototypes des fonctions, apres la compilation il me donne ces erreurs :
    - tableau.h: No such file or directory.
    - conflicting types for 'affiche'
    - previous implicit declaration of 'affiche' was here
    ces deux derniers lignes c'est pour chaque fontions
    sommeTableau et moyenneTableau.
    merci

  8. #8
    Membre émérite Avatar de valefor
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    711
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 711
    Par défaut
    Tu as du résoudre les deux derniers problèmes grâce à ce qui a déjà été dit. Je me permet de préciser qu'il faut dire au compilo où se trouvent les ".h que tu inclus avec des guillemets". Donc passe l'option '-I.' si tu veux qu'il trouve tableau.h dans ton répertoire de compile courant.

    Et au risque de paraitre chiant, la prochaine fois tu peux directement copier coller le message du compilo même si il y a des numéros de lignes et tout. Parfois on trouve des bugs grâce à ces petits détails (parfois toi même en relisant ce que tu viens de coller ).

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. besoin d'aide sur les ORB
    Par floorfille dans le forum CORBA
    Réponses: 4
    Dernier message: 24/08/2004, 15h43
  2. Aide sur les groupes (ADO)
    Par portu dans le forum QuickReport
    Réponses: 3
    Dernier message: 18/08/2004, 16h13
  3. Filemaker ... besoin d'aide sur les Plugin
    Par joange dans le forum Autres SGBD
    Réponses: 3
    Dernier message: 22/04/2004, 10h16
  4. Petite aide sur les triggers ?
    Par krimson dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 16/04/2004, 16h28
  5. [CR] besoin d'aide sur les formules
    Par GuillaumeDSA dans le forum Formules
    Réponses: 4
    Dernier message: 10/07/2003, 12h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo