HELLO!

J'ai crée un programme qui calcule le determinant d'une matrice de taille qlq en C, mais je ne sais pas où est l'erreur parceque ça ne marche pas.
Le resultat est toujours égale à 0;(peut-être erreur d'algorithme!!!)

Voici le code:

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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
 
float* suppr(float* , int, int,int);
/*prototype de la fonction suppr avec argument un tableau et 2 entiers: ligne et
colonne à supprimer*/
 
float det(float*, int);
 
/*prototype de la fonction det*/
 
int main(int argc, char *argv[])
/*Debut du programme principale*/
 
{int i, j,l,c,n;
/*"i" et "j" sont des compteurs de boucle et "l" et "c" sont les lignes et colonnes, "n" la taille de la matrice*/
 
float X; // le resultat du determinant.
 
char R='n';
/*R étant la réponse si on veut réfaire l'opération au début,
initialisé à "non"*/
 
printf("Donnez la taille de la matrice:\n");
scanf("%d",&n);
 
float *M=NULL;
debut:
M=malloc(n*n*sizeof(float)); /* déclaration de la matrice*/
 
  if (M == NULL) // Si l'allocation a échoué
 
    {
 
        exit(0); // arrête immédiatement le programme
 
    }
 
for (i=0; i<n; i++){
/*compteur de ligne*/
 
            for (j=0;j<n;j++){
                /*compteur de colonne*/
 
          printf("Donnez la valeur de l'element se trouvant au:\nligne numero %d et au colonne numero %d:\n\n",i+1,j+1);
          /*demande de l'élement M[i][j]*/
 
          scanf("%f",M+i*n+j);
        }
    }
X=det(M,n); //appelle fa fonction det
 
printf("\nDET=%f\n\n",&X);
 
printf("Voulez-vous calculer un autre? oui:'O' ou non:'N':\n");
/*demande si l'utilisateur veut refaire l'opération*/
 
scanf("%s",&R);
 
if(R=='O'||R=='o') goto debut;
/* si OUI return au debut*/
 
 
  system("PAUSE");
 
  free(M); //libère la mémoire alloué à M;
 
  return 0;
}
 
// debut de la fonction determinant.
 
float det(float *C, int k)
{
 
 
    float Y=0.0, *Z=NULL;
 
 
 
    int i;// compteur de boucle
 
 
 
    if(k==1) Y=*C;
        else {
 
 
        for(i=0;i<k;i++){
 
        Z=suppr(C,0,i,k);
 
        Y=Y+(pow(-1,i)*(*(C+i))*det(Z,k-1));
        /*la fonction suppr supprime la 0è ligne et i è colonne de la matrice C de taille k
        et retourne une matrice de taille k-1*/
 
    }
}
    return (Y);
}
 
//début de la fonction supp
 
  float* suppr (float *N ,int l, int c,int m)
{
    int i, k;
    /*i et k sont des compteurs de boucle*/
 
 
    float *A=NULL;
    /*Declaration du matrice  modifié*/
 
    A=malloc((m-1)*(m-1)*sizeof(float));
 
    if (A == NULL) // Si l'allocation a échoué
    {
        exit(0); // arrête immédiatement le programme
    }
 
        int a, b=0;
        /*déclaration des indices de A*/
if(m>1){
    for (k=0;k<m;k++){
    /*compteur des colonnes*/
 
    a=0;
 
    if(k!=c){
      /*copie les élements si k est different de c*/
 
        for (i=0;i<m;i++){
            /*compteur de ligne*/
 
        if(i!=l)
 
        {
            *(A+a*(m-1)+b)=*(N+i*m+k);
            /*copie N[i][k] dans A[a][b]*/
 
            a++;
 
        }
        else continue;
        }
    b++;
    }
 
    else continue;
}
}
else{
    A=N;
}
 
return (A);
//return le pointeur A;
 
}
Merci de votre aide!