Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 2 sur 2
  1. #1
    Nouveau Membre du Club
    Homme Profil pro
    Inscrit en
    novembre 2010
    Messages
    225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26

    Informations forums :
    Inscription : novembre 2010
    Messages : 225
    Points : 30
    Points
    30

    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 :
    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 :
    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 Confirmé Sénior
    Avatar de Sve@r
    Homme Profil pro Frédéric
    Ingénieur développement logiciels
    Inscrit en
    février 2006
    Messages
    4 423
    Détails du profil
    Informations personnelles :
    Nom : Homme Frédéric
    Âge : 46
    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 : 4 423
    Points : 8 656
    Points
    8 656

    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 :
    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 :
    1
    2
    3
    4
    5
    bool estInversible(int[][], int);
     
    int determinant(int[][], int);
     
    int[][] remplir(int[][], int);

    Fichier "main.c"
    Code c :
    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 :
    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.
    Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
    Tout ce qu'un individu reçoit sans rien faire pour l'obtenir, un autre individu a dû travailler pour le produire sans en tirer profit.
    Tout Pouvoir ne peut distribuer aux uns que ce qu'il a préalablement confisqué à d'autres car on n'accroît pas les biens en les divisant.
    Quand la moitié d'un peuple croit qu'il ne sert à rien de faire des efforts car l'autre moitié les fera pour elle, et quand cette dernière moitié se dit qu'il ne sert à rien d'en faire car ils bénéficieront à d'autres, cela s'appelle le déclin et la fin d'une nation.
    Dr. Adrian Rogers (1931-2005)

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •