Boa tarde Pessoal!
Estou com um problema em uma questão e não consigo encontrar o erro.
a questão pede: “Faça uma função que calcula a inversa de uma matriz de ordem n utilizando a matriz adjunta”.
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define MAXLIN 10
#define MAXCOL 10
#define LEN 20
//PROTÓTIPOS
void printMat(char texto[LEN], double mat[MAXLIN][MAXCOL], int n);
int trocaPivo2(double a[MAXLIN][MAXCOL], double inv[MAXLIN][MAXCOL],int n, int indxVelho);
void inversa(double a[MAXLIN][MAXCOL], double inv[MAXLIN][MAXCOL],int n);
void identidade(double ident[MAXLIN][MAXCOL], int n);
void matTransposta(int tam_i, int tam_j, int transposta[tam_j][tam_i]);
int main()
{
double A[MAXLIN][MAXCOL],inv[MAXLIN][MAXCOL];
char texto[LEN];
int i, j, n, m, aux, tamanh, tam_i, tam_j;
printf("Informe a ordem da matriz quadrada:");//esse será o valor do número de linhas e colunas
scanf("%d",&n);
printf("\n");
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
printf("Digite os valores da matriz:");// os valores a serem digitados vão fazer parte da matriz quadrada de ordem n
scanf("%2lf",&A[i][j]);
}
}
printf("\n");
printMat("Matriz original:",A,n);//vai mostrar na tela a matriz A com os números que foram digitados
inversa(A,inv,n);
printMat("Matriz inversa:",inv,n);//vai mostrar na tela a inversa da matriz A
return 0;
}
//DEFINIÇÃO DAS FUNÇÕES
void inversa(double a[MAXLIN][MAXCOL], double inv[MAXLIN][MAXCOL],int n)//função que muda a matriz normal pela inversa dela
{
int i, j, k, num_trocas=0, aux;
double m;
identidade(inv,n);
//escalonando de cima para baixo
for(i=0;i<n;i++) //diagonal
{
aux = trocaPivo2(a,inv,n,i);
if(a[i][i]!=0||aux!=0)//se o pivo for zero
{
num_trocas+=aux;
for(j=i+1;j<n;j++) //linhas zeradas
{
m=-a[j][i]/a[i][i];
for(k=0;k<n;k++)//colunas das linhas zeradas
{
a[j][k]=a[j][k]+m*a[i][k];
inv[j][k]=inv[j][k]+m*inv[i][k];
}
}
}
}
//escalonando de baixo para cima
for(i=n-1;i>0;i--)//diagonal - pivo
{
for(j=i-1;j>=0;j--)//andando nas linhas dos elementos a serem zeradas
{
m = -a[j][i]/a[i][i];
for(k=0;k<n;k++)//andando na coluna dos elementos a serem zeradas
{
a[j][k] = a[j][k]+m*a[i][k];
inv[j][k] = inv[j][k]+m*inv[i][k];
}
}
}
for(i=0;i<n;i++)//caso a diagonal não estiver com o número 1, precisa dividir os números por eles mesmos
{
m = 1/a[i][i];
a[i][i] = m*a[i][i];
for(j=0;j<n;j++)
inv[i][j] = m*inv[i][j];
}
}
int trocaPivo2(double a[MAXLIN][MAXCOL], double inv[MAXLIN][MAXCOL],int n, int indxVelho)//trocando caso tenha comecado com o numero 0
{
int indxNovo = indxVelho, i, j, cont=0;
double aux;//auxiliar é usado para trocar os elementos de uma linha com a outra
if(a[indxVelho][indxVelho]==0)// se o Pivo é 0, procura um elemento que não seja e nomeia como novo Pivo
{
for(i=indxVelho+1;i<n;i++)
if(a[i][indxVelho]!=0)
{
indxNovo = i;
cont = 1;
break;
}
if(indxNovo != indxVelho)// serve para ver se foi encontrato um novo pivo que seja diferente de 0
{
for(j=indxVelho;j<n;j++)
{
aux = a[indxVelho][j];
a[indxVelho][j] = a[indxNovo][j];
a[indxNovo][j] = aux;
aux = inv[indxVelho][j];
inv[indxVelho][j] = inv[indxNovo][j];
inv[indxNovo][j] = aux;
}
}
}
return cont;//vai retornar quantidade de trocas
}
void printMat(char texto[LEN], double mat[MAXLIN][MAXCOL], int n)//funcao que faz aparecer na tela a matriz
{
int i, j;
printf("%s\n",texto);// um texto para poder nomear a matriz
for (i = 0; i < tam_j; i++)
{
for (j = 0; j < tam_i; j++)
{
printf("%d\t", transposta[i][j]);
}
printf("\n\n");
}
printf("\n");
}
void identidade(double ident[MAXLIN][MAXCOL], int n)//criando uma matriz identidade
{
int i, j;
for(i=0;i<n;i++)//varre as linhas da matriz
for(j=0;j<n;j++)//varre as colunas da matriz
{
if(i==j)
ident[i][j]=1;//coloca o numero 1 na diagonal principal
else
ident[i][j]=0;//coloca o numero 0 nas outras posicoes
}
//TRANSPOSTA
void matTransposta(int tam_i, int tam_j, int transposta[tam_j][tam_i]);
int tam_i;
int tam_j;
int tamanho;
if(tam_i > tam_j){
tamanho = tam_i;
}
else{
tamanho = tam_j;
}
int matriz[tamanho][tamanho];
for (i = 0; i < tamanho; i++);
{
for (j = i + 1; j < tamanho; j++);
{
int tam_i;
int tam_j;
int aux;
aux = matriz[i][j];
matriz[i][j] = matriz[j][i];
matriz[j][i] = aux;
}
}
for (i = 0; i < tam_j; i++);
{
for (j = 0; j < tam_i; j++);
{
int transposta [i][j];
transposta[i][j] = matriz[i][j];
}
}
}

