Liba

Calculo de Determinante

Aug 22nd, 2013
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.39 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. #define TAM 4
  4.  
  5. using namespace std;
  6.  
  7. void PreencherMatrizQuadrada(float Matriz[][TAM], int Tamanho) {
  8.     for(int i = 0; i < Tamanho; i++) {
  9.         for(int j = 0; j < Tamanho; j++) {
  10.             cin >> Matriz[i][j];
  11.         }
  12.     }
  13. }
  14.  
  15. void ImprimirMatrizQuadrada(float Matriz[][TAM], int Tamanho) {
  16.     for(int i = 0; i < Tamanho; i++) {
  17.         for(int j = 0; j < Tamanho; j++) {
  18.             cout << Matriz[i][j] << "\t";
  19.         }
  20.         cout << endl;
  21.     }
  22. }
  23.  
  24. float EscalonarMatrizQuadrada(float Matriz[][TAM], int Tamanho) {
  25.     float Determinante = 1;
  26.     float Auxiliar;
  27.     //float VetorAuxiliar[Tamanho];
  28.     for(int i = 0; i < Tamanho; i++) {
  29.         //for(int j = 0; j < Tamanho; j++) {
  30.             if(Matriz[i][i] == 0)  // Fiz now.
  31.             { // Ou seja, se o pivõ for diferete de zer.
  32.                 for(int j = i; j < TAM; j++) {
  33.                     if(Matriz[i][j] != 0)
  34.                     { // Ou seja, se alguem elemento ebaixo do pivõ for diferente de zero.
  35.                         for(int k = 0; k < TAM; k++) {
  36.                             Auxiliar = Matriz[i][k];
  37.                             Matriz[i][k] = Matriz[j][k];
  38.                             Matriz[j][k] = Auxiliar;
  39.                             //Trocar(Matriz[i][k], Ma
  40.                         }
  41.                     }
  42.                 }
  43.             }      
  44.             if(Matriz[i][i] != 0)
  45.             { // Ou seja, se existe um pivô, diferente de zero.
  46.                 //if(Matriz[j][i] != 0) { // Se algum elemento abaixo do pivô em sua coluna for diferente de zero.
  47.                 if(Matriz[i][i] != 1) { // Se o pivô não for 1.
  48.                     Auxiliar = (1 / Matriz[i][i]);
  49.                     for(int k = 0; k < Tamanho; k++) {
  50.                         Matriz[i][k] *= Auxiliar;
  51.                     }
  52.                     Determinante /= Auxiliar; // Se multiplicar uma linha por um valor, a determinante é dividida pelo mesmo valor.
  53.                     ImprimirMatrizQuadrada(Matriz, Tamanho);
  54.                 }
  55.                 for(int l = i+1; l < Tamanho; l++) { // Para começar a verificar os número abaixo
  56.                     if(Matriz[l][i] != 0) { // Se não estiver zerada ainda vai zerar.
  57.                         // l é a linha que não está zerada.
  58.                         Auxiliar = Matriz[l][i];
  59.                         for(int k = 0; k < Tamanho; k++) {
  60.                             Matriz[l][k] = Matriz[l][k] - (Matriz[i][k] * Auxiliar);
  61.                         }
  62.                         ImprimirMatrizQuadrada(Matriz, Tamanho);
  63.                     }
  64.                 }
  65.                 // To aqui.
  66.             }
  67.     }
  68.     for(int i = 0; i < Tamanho; i++) {
  69.         Determinante *= Matriz[i][i];
  70.     }
  71.     return Determinante;
  72. }
  73.  
  74. int main() {
  75.     float MatrizA[TAM][TAM];
  76.     float Determinante;
  77.     PreencherMatrizQuadrada(MatrizA, TAM);
  78.     ImprimirMatrizQuadrada(MatrizA, TAM);
  79.     Determinante = EscalonarMatrizQuadrada(MatrizA, TAM);
  80.     cout << Determinante << endl;
  81. }
Advertisement
Add Comment
Please, Sign In to add comment