Précédent   Forum du club des développeurs et IT Pro > C et C++ > C > Débuter
Débuter Forum d'entraide pour débuter en langage C. Avant de poster -> FAQ C
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 22/11/2012, 21h23   #1
Benduroy
Futur Membre du Club
 
Homme
Inscription : novembre 2010
Messages : 158
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 25

Informations forums :
Inscription : novembre 2010
Messages : 158
Points : 18
Points : 18
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!
Benduroy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/11/2012, 22h00   #2
Sve@r
Expert Confirmé Sénior
 
Avatar de Sve@r
 
Homme Frédéric
Ingénieur développement logiciels
Inscription : février 2006
Messages : 3 495
Détails du profil
Informations personnelles :
Nom : Homme Frédéric
Âge : 44
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 : 3 495
Points : 6 601
Points : 6 601
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
Sve@r est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 09h22.


 
 
 
 
Partenaires

Hébergement Web