Imprimir el determinante
En este último paso, mejoraremos nuestro programa de cálculo del determinante de una matriz agregando una salida más detallada y manejo de errores para mejorar la experiencia del usuario.
Actualiza el archivo matrix_determinant.c
:
nano matrix_determinant.c
Reemplaza el contenido anterior con el siguiente código mejorado:
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#define MAX_SIZE 10
// Función para calcular el determinante de forma recursiva
int determinant(int matrix[MAX_SIZE][MAX_SIZE], int n) {
int det = 0;
int submatrix[MAX_SIZE][MAX_SIZE];
// Caso base para una matriz 1x1
if (n == 1) {
return matrix[0][0];
}
// Caso base para una matriz 2x2
if (n == 2) {
return matrix[0][0] * matrix[1][1] - matrix[0][1] * matrix[1][0];
}
// Caso recursivo para matrices más grandes
int sign = 1;
for (int k = 0; k < n; k++) {
// Crear la submatriz
int subi = 0;
for (int i = 1; i < n; i++) {
int subj = 0;
for (int j = 0; j < n; j++) {
if (j == k) continue;
submatrix[subi][subj] = matrix[i][j];
subj++;
}
subi++;
}
// Cálculo recursivo
det += sign * matrix[0][k] * determinant(submatrix, n - 1);
sign = -sign;
}
return det;
}
// Función para imprimir la matriz con formato
void print_matrix(int matrix[MAX_SIZE][MAX_SIZE], int n) {
printf("\nMatrix:\n");
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
printf("%5d ", matrix[i][j]);
}
printf("\n");
}
}
int main() {
int n, i, j;
int matrix[MAX_SIZE][MAX_SIZE];
bool valid_input = false;
while (!valid_input) {
// Leer la dimensión de la matriz
printf("Ingrese el tamaño de la matriz cuadrada (1-%d): ", MAX_SIZE);
if (scanf("%d", &n)!= 1) {
printf("Entrada no válida. Por favor, ingrese un número.\n");
while (getchar()!= '\n'); // Limpiar el buffer de entrada
continue;
}
// Validar el tamaño de la matriz
if (n < 1 || n > MAX_SIZE) {
printf("Tamaño de matriz no válido. Por favor, ingrese un tamaño entre 1 y %d.\n", MAX_SIZE);
continue;
}
valid_input = true;
}
// Leer los elementos de la matriz
printf("Ingrese los elementos de la matriz:\n");
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
printf("Ingrese el elemento [%d][%d]: ", i, j);
while (scanf("%d", &matrix[i][j])!= 1) {
printf("Entrada no válida. Por favor, ingrese un número entero para el elemento [%d][%d]: ", i, j);
while (getchar()!= '\n'); // Limpiar el buffer de entrada
}
}
}
// Imprimir la matriz de entrada
print_matrix(matrix, n);
// Calcular e imprimir el determinante
int det = determinant(matrix, n);
// Salida formateada del determinante
printf("\n--- Cálculo del Determinante ---\n");
printf("Dimensión de la Matriz: %d x %d\n", n, n);
printf("Determinante: %d\n", det);
return 0;
}
Compila y ejecuta el programa:
gcc matrix_determinant.c -o matrix_determinant
./matrix_determinant
Ejemplo de salida:
Ingrese el tamaño de la matriz cuadrada (1-10): 3
Ingrese los elementos de la matriz:
Ingrese el elemento [0][0]: 1
Ingrese el elemento [0][1]: 2
Ingrese el elemento [0][2]: 3
Ingrese el elemento [1][0]: 4
Ingrese el elemento [1][1]: 5
Ingrese el elemento [1][2]: 6
Ingrese el elemento [2][0]: 7
Ingrese el elemento [2][1]: 8
Ingrese el elemento [2][2]: 9
Matrix:
1 2 3
4 5 6
7 8 9
--- Cálculo del Determinante ---
Dimensión de la Matriz: 3 x 3
Determinante: 0
Mejoras clave:
- Se agregó validación de entrada para manejar entradas no válidas.
- Se creó una función separada para imprimir la matriz con un mejor formato.
- Se mejoró la salida para mostrar claramente la dimensión de la matriz y el determinante.
- Se mejoró el manejo de errores para las entradas del usuario.