Déterminant d'une matrice en C

Résolu/Fermé
VEF King - 30 mai 2011 à 19:42
 VEF King - 31 mai 2011 à 15:25
Bonjour à tous,

Voilà, mercredi, j'ai un examen en programmation et le professeur nous a laissé comprendre qu'on devrait être capable de calculer le déterminant d'une matrice...
Je me suis donc fortement penché sur la question mais j'ai un problème avec ma fonction qui calcule le déterminant, j'ai l'impression lors de la compilation, quelle boucle à l'infini alors que ça me semble impossible... voici mon code

#include <stdlib.h> 
#include <stdio.h>
#include <math.h>
#include <conio.h>
#define N 8

void affichage (float mat[][N], int n)
{
	int i, j;
	printf ("Affichage de la matrice %dx%d", n, n);
	for (i=0; i<n; i++)
	{
		printf ("\n");
		for (j=0; j<n; j++)
		{
			printf ("%.3f\t", mat [i][j]);
		}
	}
	printf ("\n\n");
}

float determinant (float mat[][N], int n)
{
	float result;
	float mat_n_moins_1 [N][N];
	int i, j, k;
	double l, puiss=0;
	if (n==1)
		return mat [0][0];
	else
	{
		result = 0;
		for (i=0; i<n; i++)
		{
			for (j=0; j<n-1; j++)
			{
				for (k=0; k<n-1; k++)
				{
					mat_n_moins_1 [j][k] = mat [j+1][k+(k>=i)];
				}
			}
			l=i;
						
			result = result + pow(-1, l) *mat[0][i] * determinant(mat_n_moins_1, n-1);
		}
		return result;
	}
}

int main ()
{
	float tab[N][N];
	float result [N][N];
	tab [0][0]= -1;tab [0][1]= 2;tab [0][2]= 5;
	tab [1][0]= 1;tab [1][1]= 2;tab [1][2]= 3;
	tab [2][0]= -2;tab [2][1]= 8;tab [2][2]= 10;
	affichage (tab, 3);
	printf ("determinant : %f", determinant (tab, 3));
	getch ();

}


Je me suis un peu fait un lavage de cerveau avec la conception du programme et je ne vois plus rien... alors si vous pouvez m'aider, ce serait sympa...



1 réponse

salut,
ton getch ( du cout conio.h // pas present dans la librairie standard , seulement sous ms-dos/win) ne sert pas a grand chose. remplace cette instruction par un return EXIT_SUCCESS; et supprime le fichier d'entete conio.h et puis tu n'utilise pas puiss et result ( en soit ce pas grave mais vois mieux eviter de declarer des variables dont on ne sert pas). si tu est sous windows et que la fenetre se referme avant que tes pu voir le resultat met un : system("pause"); avant le return EXIT_SUCCESS du main
1
En fait, c'est à ca que sert mon getch (). Je m'en sert comme un system ("pause");
Je n'ai toujours pas trouvé mon erreur et ça m'énerve. Par contre c'est vrai que je n'utilise pas puiss. Merci de ton aide mais mon problème n'est toujours pas résolu.
0
je vien de tester ton code il marche nikel c moi ! juste les modif que j'ai suggeré dans precedent post et un
gcc -Wall -std=c99 -lm -o prog nom_prog.c
0
eh bien, je viens de le tester et il fonctionne. Peut-être un bug hier...
En tout cas merci pour ton aide.
0