/*A operação da matriz e do código será feita através do espaço para input ao lado.
Comece substituindo a linha 1 pelo tamanho da matriz (2 para 2x2 ou 3 para 3x3);
Em seguida, substitua a linha logo abaixo pelos valores da matriz, todos na mesma linha, separados somente por espaço.
*/
#include <stdio.h>
void imprimirMatriz(float matriz[3][3], int tamanho) {
for (int i = 0; i < tamanho; i++) {
for (int j = 0; j < tamanho; j++) {
printf("%.2f\t", matriz[i][j]);
}
printf("\n");
}
}
int determinante2x2(int m[2][2]) {
return m[0][0] * m[1][1] - m[0][1] * m[1][0];
}
int determinante3x3(int m[3][3]) {
int det = 0;
for (int j = 0; j < 3; j++) {
int sub[2][2], linha = 0;
for (int i = 1; i < 3; i++) {
int coluna = 0;
for (int k = 0; k < 3; k++) {
if (k == j) continue;
sub[linha][coluna++] = m[i][k];
}
linha++;
}
int sinal = (j % 2 == 0) ? 1 : -1;
det += sinal * m[0][j] * determinante2x2(sub);
}
return det;
}
void inversa2x2(int m[2][2]) {
int det = determinante2x2(m);
if (det == 0) {
printf("A matriz não tem inversa (det = 0).\n");
return;
}
float inv[2][2];
inv[0][0] = m[1][1] / (float)det;
inv[0][1] = -m[0][1] / (float)det;
inv[1][0] = -m[1][0] / (float)det;
inv[1][1] = m[0][0] / (float)det;
float inv3x3[3][3] = { {inv[0][0], inv[0][1]}, {inv[1][0], inv[1][1]} };
printf("Matriz inversa:\n");
imprimirMatriz(inv3x3, 2);
}
void inversa3x3(int m[3][3]) {
int det = determinante3x3(m);
if (det == 0) {
printf("A matriz não tem inversa (det = 0).\n");
return;
}
float cof[3][3];
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
int sub[2][2], linha = 0;
for (int mi = 0; mi < 3; mi++) {
if (mi == i) continue;
int coluna = 0;
for (int mj = 0; mj < 3; mj++) {
if (mj == j) continue;
sub[linha][coluna++] = m[mi][mj];
}
linha++;
}
int sinal = ((i + j) % 2 == 0) ? 1 : -1;
cof[i][j] = sinal * determinante2x2(sub);
}
}
float adj[3][3], inv[3][3];
for (int i = 0; i < 3; i++)
for (int j = 0; j < 3; j++)
adj[i][j] = cof[j][i]; // transposta da matriz de cofatores
for (int i = 0; i < 3; i++)
for (int j = 0; j < 3; j++)
inv[i][j] = adj[i][j] / det;
printf("Matriz inversa:\n");
imprimirMatriz(inv, 3);
}
int main() {
int tipo;
printf("Digite o tamanho da matriz (2 para 2x2, 3 para 3x3): ");
scanf("%d", &tipo);
if (tipo == 2) {
int m[2][2];
printf("Digite os 4 elementos da matriz 2x2:\n");
for (int i = 0; i < 2; i++)
for (int j = 0; j < 2; j++)
scanf("%d", &m[i][j]);
inversa2x2(m);
} else if (tipo == 3) {
int m[3][3];
printf("Digite os 9 elementos da matriz 3x3:\n");
for (int i = 0; i < 3; i++)
for (int j = 0; j < 3; j++)
scanf("%d", &m[i][j]);
inversa3x3(m);
} else {
printf("Tamanho inválido.\n");
}
return 0;
}