Giz a écrit :
Voilà je galère un peu, alors j'ai l'algo (c t un ex a faire):
On considère une matrice carrée M de dimension n, n >= 1, dont les éléments sont notés m(i,j), avec 1<=i<=n, 1<=j<=n. Le déterminant de M noté D est égal à:
D= m(1,1) si n=1,
Somme de k=1 à n de : (-1)^(k+1)*m(k,1)D(k) si n>1.
D(k) est le déterminant d'une sous matrice de M obtenue en lui supprimant la ligne k et la colonne 1.
--> Ecrire une fonction C qui permet de calculer le déterminant d'une matrice carrée de dimension n.
----------------------------------------------------------------
Voilà ci dessus TEL QUEL l'énoncé.
Voici ci dessous ma fonction C (décomposé en 2 fonctions) dont je sais qu'elle est fausse car:
1- Le résultat est faux (mon determine est tjs nul)
2- Je ne sais pas comment libérer la mémoire allouer par malloc()
Code :
- /***************************************************************************************/
- //Calcul du determinant de la matrice M
- int determinant(int **M, int dim)
- {
- int somme = 0, **m;
- int i, k, taille = dim;
- static int compteur = 0;
- compteur++;
- printf("entree n %d dans la fonction determinant()\n", compteur);
- afficher(M, dim);
- if (taille > 1)
- {
- for(k=0;k<taille;k++)
- {
- //Calcul du "sous" determinant
- m = (int**)malloc(sizeof(int*)*taille-1);
- for(i=0;i<taille-1;i++)
- m[i] = (int*)malloc(sizeof(int)*taille-1);
- initialisation_sous_matrice(m, M, k, taille);
- //Cas k pair
- if((k+1)%2)
- //les 2 lignes ci dessous, la ou é t l'erreur (avec balises )
- somme += -1*M[k][ [g]1 ]*determinant(m, taille-1);
- //Cas k impair
- else
- somme += M[k][ 1 ]*determinant(m, taille-1);
- }
- //Ce qui suit est en commentaire car je ne vois pas comment déssallouer la mémoire ds un 1er tps !
- /*for(i=0;i<taille-1;i++)
- free(m[i]);
- free (m);*/
- }
- else
- return M[0][0];
- return somme;
- }
- /***************************************************************************************/
- //Calcul du sous determinant de la matrice M
- void initialisation_sous_matrice(int **m, int **M, int k, int taille)
- {
- int i, j, l;
- l = -1;
- for(i=0;i<taille;i++)
- {
- if (i==k)
- {
- l = i-1;
- continue;
- }
- l++;
- for(j=1;j<taille;j++)
- m[l][j-1] = M[i][j];
- }
- return;
- }
|
----------------------------------------------------------------
Comme d'hab, si vous a v des questions ou besoin de précision pour m'éclaicir sur ce code, dite le moi ... parce que jsuis un peu bloqué (jmi suis penché 1H !)
|