Ir para conteúdo
Fórum Script Brasil

DanteAndante

Membros
  • Total de itens

    2
  • Registro em

  • Última visita

Tudo que DanteAndante postou

  1. Boa Tarde eu estou fazendo um codigo em c++ para calcular a matriz inversa, está tudo certo se eu colocar valores inteiros, porém quando eu coloco valores decimais em uma matriz 3x3 a função que calcula o determinante está arredondando o resultado causando um erro no resultado final, alguém sabe como resolver isso? codigo abaixo: #include<iostream> #include <cmath> #define MAX 25 using namespace std; double cofator(double matriza[MAX][MAX], int m, int linha, int coluna); double determinante(double matriza[MAX][MAX], int m); int main(){ int i,j,m,a,b,n,h,w; int l=0,c=0; double matriza[MAX][MAX], matrizb[MAX][MAX],cofatores[MAX][MAX],inversa[MAX][MAX],transposta[MAX][MAX],det; cout << "\t\t\t\tPROGRAMA DE CALCULO DE MATRIZ INVERSA\n\n"; cout<< "Digite a ordem da matriz quadrada: "; cin >> m; cout << "\n\nDigite a matriz A: \n"; for(i=0;i<m;i++){ for(j=0;j<m;j++){ cin >> matriza[i][j]; } } cout << "\n\nA matriz digitada foi: \n"; for(i=0;i<m;i++){ for(j=0;j<m;j++){ cout<< "\t" << matriza[i][j]; } cout <<"\n"; } if(m==2){ //CALCULO DO DETERMINANTE det=(matriza[0][0]*matriza[1][1])-(matriza[0][1]*matriza[1][0]); cout << "\n\n Determinante: " << det<<"\n"; if(det==0){ cout << "A MATRIZ não PODE SER INVERTIDA!!"; }else{ //calculo dos cofatores for (h=0;h<m;h++) for (w=0;w<m;w++){ l=0; c=0; //n=m-1; for(i=0;i<m;i++) for(j=0;j<m;j++) if(i!=h && j!=w){ matrizb[l][c]=matriza[i][j]; if(c<(m-2)) c++; else{ c=0; l++; } } //cout<< "Matriz B: " <<matrizb[0][0]; cofatores[h][w]=matrizb[0][0]; } for(h=0;h<m;h++){ for(w=0;w<m;w++){ cofatores[h][w]=pow(-1,(h+w+2))*cofatores[h][w]; } } cout << "\n\nA matriz dos cofatores: \n"; for(h=0;h<m;h++){ for(w=0;w<m;w++){ cout<< "\t" <<cofatores[h][w]; } cout <<"\n"; } //TRANSPONDO A MATRIZ DOS COFATORES for(h=0;h<m;h++){ for(w=0;w<m;w++){ transposta[w][h]=cofatores[h][w]; } } cout << "\n\nA matriz transposta dos cofatores: \n"; for(w=0;w<m;w++){ for(h=0;h<m;h++){ cout<< "\t" <<transposta[w][h]; } cout <<"\n"; } // CALCULO DA MATRIZ INVERSA for(w=0;w<m;w++){ for(h=0;h<m;h++){ inversa[w][h]=transposta[w][h]/det; } } cout << "\n\nA matriz inversa: \n"; for(w=0;w<m;w++){ for(h=0;h<m;h++){ cout<< "\t" <<inversa[w][h]; } cout <<"\n"; } } }if(m==1){ matriza[0][0]=pow(matriza[0][0],-1); cout << "\n\nA matriz inversa: \n" << matriza[0][0]; }if(m>=3){ cout << "\n\n Determinante: " <<determinante(matriza,m)<<"\n"; //cout << det; if(determinante==0){ cout << "\n\nA MATRIZ não PODE SER INVERTIDA!!"; }else{ //calculo dos cofatores for(i=0;i<m;i++){ for(j=0;j<m;j++){ cofatores[i][j] = cofator(matriza,m,i,j); } cout << "\n"; } cout << "matriz dos cofatores: \n"; for(i=0;i<m;i++){ for(j=0;j<m;j++){ //cout<<"\t" << cofator(matriza,m,i,j); cout << "\t" << cofatores[i][j]; } cout << "\n"; } //TRANSPONDO A MATRIZ DOS COFATORES for(h=0;h<m;h++){ for(w=0;w<m;w++){ transposta[w][h]=cofatores[h][w]; } } cout << "\n\nA matriz transposta dos cofatores: \n"; for(w=0;w<m;w++){ for(h=0;h<m;h++){ cout<< "\t" <<transposta[w][h]; } cout <<"\n"; } // CALCULO DA MATRIZ INVERSA for(w=0;w<m;w++){ for(h=0;h<m;h++){ inversa[w][h]=transposta[w][h]/determinante(matriza,m); } } cout << "\n\nMatriz inversa: \n"; for(w=0;w<m;w++){ for(h=0;h<m;h++){ cout << "\t" << inversa[w][h]; } cout << "\n"; } } }else{ cout<< "\n\n\t\tCALCULO DA MATRIZ INVERSA AINDA não PROGRAMADO\n\n"; } return 0; } double determinante(double matriza[MAX][MAX], int m) { int det=0.0; if (m == 1){ det = matriza[0][0]; }else{ for(int j=0; j<m; j++){ det = det + matriza[0][j] * cofator(matriza,m, 0, j); } } return det; } double cofator(double matriza[MAX][MAX], int m, int linha, int coluna) { double submatriz[MAX][MAX]; int n=m-1; int a=0; int b=0; //int j; for (int i=0; i<m; i++){ for (int j=0; j<m; j++){ if (i !=linha && j !=coluna){ submatriz[a][b] = matriza[i][j]; b++; if (b >= n){ a++; b=0; } } } } return pow(-1,linha+coluna)*determinante(submatriz, n); }
×
×
  • Criar Novo...