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 :

importer bibliothèque dans programme principal


Sujet :

C

  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Novembre 2010
    Messages
    273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 273
    Points : 73
    Points
    73
    Par défaut importer bibliothèque dans programme principal
    Salut à tous,

    Voilà mon problème. J'ai deux fichiers: calcul_matrice.h qui contient 3 fonctions effectuant des calculs sur des matrices, et testMatrice.c qui contient le main.
    J'ai lu sur ce forum qu'il fallait faire précéder chaque fonction de calcul_matrice.h du mot clé "extern" à priori, puis j'include ce fichier dans le testMatrice.c.

    Code c : 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
    // Effectue des calculs sur les matrices
    #include <stdio.h>
     
    extern bool estInversible(int[][] mat, int taille) {
         if (determinant(mat, taille) != 0) {
            return true;
         return false;
    }
     
    extern int determinant(int[][] mat, int taille) {
        int det = 0;
        int index;
        int[taille-1][taille-1] mat2;
        mat2 = remplir(mat, taille);
        if (taille > 2) {
          for (index=0; index < taille; index++) {
              if (index%2=0) {
                 det = det + mat[0][index] * determinant(mat2, taille-1);
              } else {
                det = det - mat[0][index] * determinant(mat2, taille-1);
              }
          }
          return det;
        } else {
          return (mat[0][0] * mat[1][1]) - (mat[0][1] * mat[1][0]);
        }
    }
     
    extern int[][] remplir(int[][] mat, int taille) {
            int i, j;
            int[taille-1][taille-1] matARemplir;
            for (i=0; i < taille-1;; i++) {
                for (j=0; j < taille-1;; j++) {
                    matARemplir[i][j] = mat[i+1][j+1];
                }
            }
            return matARemplir;
    }

    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    // Affiche le déterminant
    #include <stdio.h>
    #include <calcul_matrice.h>
     
    int main(int argc, char *argv[])
    {
        const taille = 3;
        int[3][3] mat = {{1, 4, 7}, {2, 5, 8}, {3, 6, 9}};
        int det;
     
        det = determinant(mat, taille);
        printf("%d", det);
    	return 0;
    }

    Et à la compilation j'ai l'erreur: calcul_matrice.h: no such file or directory

    (les deux fichiers se trouvent sur mon bureau).

    Merci de votre aide!

  2. #2
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 684
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 684
    Points : 30 973
    Points
    30 973
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Benduroy Voir le message

    [CODE=c]// Affiche le déterminant
    #include <stdio.h>
    #include <calcul_matrice.h>
    ...[CODE]

    Et à la compilation j'ai l'erreur: calcul_matrice.h: no such file or directory
    Salut

    Si tu inclues un fichier en mettant "<fichier>", le compilo ira chercher le fichier dans ses répertoires dédiés (généralement "/usr/include"). Les répertoires dédiés peuvent être modifiés à la volée en mettant l'option "-I répertoire" dans la ligne de compilation mais c'est tout.

    Si tu dois inclure un fichier se trouvant ailleurs, il te faut écrire #include "fichier" en utilisant les guillemets et non les caractères <>.

    Accessoirement on ne met jamais de code dans un ".h". Un ".h" est un outil destiné à faire connaitre les fonctions donc distribué chez le public. Le code pur se trouve, lui, dans les librairies compilées et donc inaccessible.

    Fichier "calcul_matrice.c"
    Code c : 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
    // Effectue des calculs sur les matrices
    #include <stdio.h>
     
    bool estInversible(int[][] mat, int taille) {
         if (determinant(mat, taille) != 0) {
            return true;
         return false;
    }
     
    int determinant(int[][] mat, int taille) {
        int det = 0;
        int index;
        int[taille-1][taille-1] mat2;
        mat2 = remplir(mat, taille);
        if (taille > 2) {
          for (index=0; index < taille; index++) {
              if (index%2=0) {
                 det = det + mat[0][index] * determinant(mat2, taille-1);
              } else {
                det = det - mat[0][index] * determinant(mat2, taille-1);
              }
          }
          return det;
        } else {
          return (mat[0][0] * mat[1][1]) - (mat[0][1] * mat[1][0]);
        }
    }
     
    int[][] remplir(int[][] mat, int taille) {
            int i, j;
            int[taille-1][taille-1] matARemplir;
            for (i=0; i < taille-1;; i++) {
                for (j=0; j < taille-1;; j++) {
                    matARemplir[i][j] = mat[i+1][j+1];
                }
            }
            return matARemplir;
    }

    Fichier "calcul_matrice.h"

    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    bool estInversible(int[][], int);
     
    int determinant(int[][], int);
     
    int[][] remplir(int[][], int);

    Fichier "main.c"
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    // Affiche le déterminant
    #include <stdio.h>
    #include "calcul_matrice.h"
     
    int main(int argc, char *argv[])
    {
        const taille = 3;
        int[3][3] mat = {{1, 4, 7}, {2, 5, 8}, {3, 6, 9}};
        int det;
     
        det = determinant(mat, taille);
        printf("%d", det);
    	return 0;
    }

    Compilation
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    gcc -c calcul_matrice.c
    gcc -c main.c
    gcc calcul_matrice.o main.o -o programme
    Ainsi, celui qui veut utiliser tes fonctions n'a qu'à récupérer "calcul_matrice.h" et "calcul_matrice.o" (qu'on remplacera généralement par une librairie qui est, pour simplifier, qu'un gros fichier regroupant plusieurs ".o") et peut se créer son propre main() sans pirater tes sources.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

Discussions similaires

  1. [SP-2007] Importation automatique dans le bibliothèque de document
    Par stephdiplo150 dans le forum SharePoint
    Réponses: 2
    Dernier message: 17/06/2010, 11h48
  2. Réponses: 0
    Dernier message: 25/08/2009, 14h40
  3. La sous-fonction ne marche pas dans le programme principal
    Par lematlabeur dans le forum MATLAB
    Réponses: 11
    Dernier message: 15/11/2007, 21h04
  4. Réponses: 13
    Dernier message: 10/07/2006, 16h47
  5. Réponses: 2
    Dernier message: 02/06/2006, 12h59

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