Calculo del determenante de una matriz 3x3
De Ejercicios
Contenido |
Enunciado
CÁLCULO DEL DETERMINANTE DE UNA MATRIZ 3X3.
Realiza un programa que calcule el determinante de una matriz 3×3. En el caso de que la matriz sea singular, el programa deberá advertirlo con un mensaje. Guárdalo con el nombre determin.c. Recuerda que la fórmula para el cálculo del determinante es la siguiente:
En vez de tener que introducir la matriz tecleándola cada vez, utiliza un fichero llamado matriz.d que contiene una matriz 3×3 cualquiera y haz que el programa principal lea este fichero empleando la función fscanf( ).
Soluciones
Programa en C por Angel
Solución comentada al Ejercicio:
/* fichero determin.c */
#include <stdio.h>
#define SIZE 3
void main(void) {
double matriz[SIZE][SIZE];
double determinante;
int i, j;
FILE *fi;
/* printf("Introduzca los elementos de la matriz 3x3:\n"); */
fi = fopen("matriz.d", "r+");
for (i=0; i<SIZE; i++)
for (j=0; j<SIZE; j++) {
fscanf(fi, "%lf", &matriz[i][j]);
}
fclose(fi);
printf("\n");
determinante = matriz[0][0]*matriz[1][1]*matriz[2][2];
determinante += matriz[0][1]*matriz[1][2]*matriz[2][0];
determinante += matriz[1][0]*matriz[2][1]*matriz[0][2];
determinante -= matriz[0][2]*matriz[1][1]*matriz[2][0];
determinante -= matriz[0][1]*matriz[1][0]*matriz[2][2];
determinante -= matriz[0][0]*matriz[2][1]*matriz[1][2];
printf("La matriz introducida es:\n");
for (i=0; i<SIZE; i++) {
for (j=0; j<SIZE; j++)
printf("%8.2lf", matriz[i][j]);
printf("\n");
}
printf("\nY su determinante es: %12.4lf\n", determinante);
}
Comentario
En principio este programa no existe ninguna dificultad respecto al manejo de las matrices (ya se ha visto en programas anteriores). Lo único que es importante comentar es el algoritmo: tenemos siempre una matriz 3x3 y, por ello, podemos realizar las operaciones “a mano” (sin más complejidades en el algoritmo, es decir, sin introducir bucles o bifurcaciones). Si quisiéramos calcular el determinante de una matriz cualquiera, tendríamos que triangularizar la matriz y, una vez triangularizada, el determinante sería el producto de los elementos de la diagonal. La matriz se lee de un fichero de disco. Para ello es necesario abrir el fichero mediante la función fopen(), que devuelve un puntero a FILE. Después se van leyendo los datos de dicho fichero mediante la función fscanf() a la que se pasa como primer argumento el puntero al fichero abierto; excepto en que lee de fichero, esta función es completamente análoga a scanf(). Al acabar de leer la matriz se debe cerrar el fichero con la función fclose(). Es interesante observar como se ha dividido una expresión muy larga en seis expresiones más cortas, utilizando los operadores de suma y diferencia acumulativas (+= y -=).
