Imprimir o Determinante
Neste passo final, melhoraremos nosso programa de determinante de matriz adicionando saída mais detalhada e tratamento de erros para aprimorar a experiência do usuário.
Atualize o arquivo matrix_determinant.c:
nano matrix_determinant.c
Substitua o conteúdo anterior pelo seguinte código aprimorado:
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#define MAX_SIZE 10
// Função para calcular o determinante recursivamente
int determinant(int matrix[MAX_SIZE][MAX_SIZE], int n) {
int det = 0;
int submatrix[MAX_SIZE][MAX_SIZE];
// Caso base para matriz 1x1
if (n == 1) {
return matrix[0][0];
}
// Caso base para matriz 2x2
if (n == 2) {
return matrix[0][0] * matrix[1][1] - matrix[0][1] * matrix[1][0];
}
// Caso recursivo para matrizes maiores
int sign = 1;
for (int k = 0; k < n; k++) {
// Criar 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;
}
// Função para imprimir a matriz com formatação
void print_matrix(int matrix[MAX_SIZE][MAX_SIZE], int n) {
printf("\nMatriz:\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) {
// Ler a dimensão da matriz
printf("Digite o tamanho da matriz quadrada (1-%d): ", MAX_SIZE);
if (scanf("%d", &n) != 1) {
printf("Entrada inválida. Por favor, digite um número.\n");
while (getchar() != '\n'); // Limpar o buffer de entrada
continue;
}
// Validar o tamanho da matriz
if (n < 1 || n > MAX_SIZE) {
printf("Tamanho da matriz inválido. Por favor, digite um tamanho entre 1 e %d.\n", MAX_SIZE);
continue;
}
valid_input = true;
}
// Ler os elementos da matriz
printf("Digite os elementos da matriz:\n");
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
printf("Digite o elemento [%d][%d]: ", i, j);
while (scanf("%d", &matrix[i][j]) != 1) {
printf("Entrada inválida. Por favor, digite um inteiro para o elemento [%d][%d]: ", i, j);
while (getchar() != '\n'); // Limpar o buffer de entrada
}
}
}
// Imprimir a matriz de entrada
print_matrix(matrix, n);
// Calcular e imprimir o determinante
int det = determinant(matrix, n);
// Saída formatada do determinante
printf("\n--- Cálculo do Determinante ---\n");
printf("Dimensão da Matriz: %d x %d\n", n, n);
printf("Determinante: %d\n", det);
return 0;
}
Compile e execute o programa:
gcc matrix_determinant.c -o matrix_determinant
./matrix_determinant
Exemplo de saída:
Digite o tamanho da matriz quadrada (1-10): 3
Digite os elementos da matriz:
Digite o elemento [0][0]: 1
Digite o elemento [0][1]: 2
Digite o elemento [0][2]: 3
Digite o elemento [1][0]: 4
Digite o elemento [1][1]: 5
Digite o elemento [1][2]: 6
Digite o elemento [2][0]: 7
Digite o elemento [2][1]: 8
Digite o elemento [2][2]: 9
Matriz:
1 2 3
4 5 6
7 8 9
--- Cálculo do Determinante ---
Dimensão da Matriz: 3 x 3
Determinante: 0
Melhorias-chave:
- Adição de validação de entrada para lidar com entradas inválidas.
- Criação de uma função separada para imprimir a matriz com melhor formatação.
- Saída aprimorada para mostrar a dimensão da matriz e o determinante claramente.
- Tratamento de erros aprimorado para entradas do usuário.