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;
} |
Partager