Imprimir Soluções para Variáveis
Neste passo, você completará a implementação da Regra de Cramer calculando e imprimindo as soluções para as variáveis em um sistema de equações lineares.
Abra o arquivo de origem existente:
cd ~/project
nano cramer_solver.c
Atualize o código com o cálculo da solução da Regra de Cramer:
#include <stdio.h>
#define MAX_SIZE 3
// A função computeDeterminant permanece a mesma
float computeDeterminant(float matrix[MAX_SIZE][MAX_SIZE], int n) {
if (n == 1) {
return matrix[0][0];
}
if (n == 2) {
return matrix[0][0] * matrix[1][1] - matrix[0][1] * matrix[1][0];
}
float det = 0;
float submatrix[MAX_SIZE][MAX_SIZE];
int sign = 1;
for (int x = 0; x < n; x++) {
int subi = 0;
for (int i = 1; i < n; i++) {
int subj = 0;
for (int j = 0; j < n; j++) {
if (j == x) continue;
submatrix[subi][subj] = matrix[i][j];
subj++;
}
subi++;
}
det += sign * matrix[0][x] * computeDeterminant(submatrix, n - 1);
sign = -sign;
}
return det;
}
// Função para resolver equações lineares usando a Regra de Cramer
void solveUsingCramersRule(float matrix[MAX_SIZE][MAX_SIZE], float constants[MAX_SIZE], int n) {
float mainDeterminant = computeDeterminant(matrix, n);
// Verifica se o sistema possui uma solução única
if (mainDeterminant == 0) {
printf("O sistema não possui uma solução única (o determinante é zero).\n");
return;
}
// Cria matrizes temporárias para cada variável
float tempMatrix[MAX_SIZE][MAX_SIZE];
float solutions[MAX_SIZE];
// Calcula as soluções para cada variável
for (int i = 0; i < n; i++) {
// Copia a matriz original
for (int j = 0; j < n; j++) {
for (int k = 0; k < n; k++) {
tempMatrix[j][k] = matrix[j][k];
}
}
// Substitui a i-ésima coluna pelas constantes
for (int j = 0; j < n; j++) {
tempMatrix[j][i] = constants[j];
}
// Calcula o determinante para esta variável
solutions[i] = computeDeterminant(tempMatrix, n) / mainDeterminant;
}
// Imprime as soluções
printf("\nSoluções:\n");
for (int i = 0; i < n; i++) {
printf("x%d = %.2f\n", i+1, solutions[i]);
}
}
int main() {
float matrix[MAX_SIZE][MAX_SIZE];
float constants[MAX_SIZE];
int n;
// O código de entrada permanece o mesmo
printf("Digite o número de equações (máximo 3): ");
scanf("%d", &n);
// Entrada dos coeficientes
printf("Digite os coeficientes da matriz:\n");
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
printf("Digite o coeficiente a[%d][%d]: ", i+1, j+1);
scanf("%f", &matrix[i][j]);
}
}
// Entrada das constantes
printf("Digite as constantes:\n");
for (int i = 0; i < n; i++) {
printf("Digite a constante b[%d]: ", i+1);
scanf("%f", &constants[i]);
}
// Resolve usando a Regra de Cramer
solveUsingCramersRule(matrix, constants, n);
return 0;
}
Compile o programa atualizado:
gcc -o cramer_solver cramer_solver.c
Execute o programa:
./cramer_solver
Exemplo de saída:
Digite o número de equações (máximo 3): 2
Digite os coeficientes da matriz:
Digite o coeficiente a[1][1]: 2
Digite o coeficiente a[1][2]: 1
Digite o coeficiente a[2][1]: -3
Digite o coeficiente a[2][2]: 4
Digite as constantes:
Digite a constante b[1]: 4
Digite a constante b[2]: 5
Soluções:
x1 = 2.00
x2 = 1.00
Pontos-chave sobre o cálculo da solução:
- A função
solveUsingCramersRule() implementa a Regra de Cramer.
- Ela verifica se o sistema possui uma solução única, verificando o determinante principal.
- Para cada variável, cria uma matriz temporária e calcula seu determinante.
- As soluções são calculadas dividindo o determinante de cada variável pelo determinante principal.
O programa agora resolve completamente um sistema de equações lineares usando a Regra de Cramer.