A maior rede de estudos do Brasil

Alguém pode me fornecer um programa que calcule o determinante de uma matriz nxn?

O programa deve ser em c++.


7 resposta(s) - Contém resposta de Especialista

User badge image

RD Resoluções Verified user icon

Há mais de um mês

Inicialmente devemos definir as variáveis que serão utilizadas no programa.

#include <iostream>

using namespace std;

int main()

{

int n,i,j;

int v[2][2];

int diagonal1,diagonal,determinante;

Agora devemos receber os valores referente a uma matriz 2x2. A mesma sorte serve para as demais matrizes.

for(i=0;i<2;i++){

for( j=0;j<2;j++){

printf("\nDigite os valores:");

scanf("%i", &v[i][j]);

}

}

Agora devemos calcular as diagonais da matriz.

for(i=0;i<2;i++){

for( j=0;j<2;j++){

if(i==j){

diagonal1=diagonal1*v[i][j];

}

}}

diagonal2=v[0][1]*v[1][0];

Por fim, devemos calcular o determinante e apresentar ao usuário.

determinante=diagonal1-diagonal2;

printf(" %i",determinante);

return 0;

}

Inicialmente devemos definir as variáveis que serão utilizadas no programa.

#include <iostream>

using namespace std;

int main()

{

int n,i,j;

int v[2][2];

int diagonal1,diagonal,determinante;

Agora devemos receber os valores referente a uma matriz 2x2. A mesma sorte serve para as demais matrizes.

for(i=0;i<2;i++){

for( j=0;j<2;j++){

printf("\nDigite os valores:");

scanf("%i", &v[i][j]);

}

}

Agora devemos calcular as diagonais da matriz.

for(i=0;i<2;i++){

for( j=0;j<2;j++){

if(i==j){

diagonal1=diagonal1*v[i][j];

}

}}

diagonal2=v[0][1]*v[1][0];

Por fim, devemos calcular o determinante e apresentar ao usuário.

determinante=diagonal1-diagonal2;

printf(" %i",determinante);

return 0;

}

User badge image

Alessandro

Há mais de um mês

Cara! 
esse site aqui faz tudo que você imaginar com matrix e é de facil inserção de dados.

Vou listar algumas coisas q ele faz.

->MATRIZ TRANSPOSTA 

->DETERMINANTE

->MATRIZ INVERSA

->DECOMPOSIÇÃO LU 

->DECOMPOSIÇÃO LQ

->DECOMPOSIÇÃO DE CHOLESKY

->ADIÇÃO /SUBTRAÇÃO / MULTIPLICAÇÃO

->RESOLVE SISTEMAS LINEARES

-> E MAIS...
->>>>>>>>>>>>>>>http://www.bluebit.gr/matrix-calculator/ <<<<<<<<<---

 

 

User badge image

Jonata

Há mais de um mês

Tenho um arquivo no Code Blocks, não sei se pode enviar arquivo então vou colar aqui em baixo.

......................................................................................................

#include<iostream>

using namespace std;

// Programa para calcular o determinante de uma matriz 3x3

int main(){
int A[3][3],SDP,SDS,prod,lin,col,Aexp[3][5],det;

/*
Uma forma de calcular o determinante é utilizar a regra de sarrus. Expande-se a matriz original copiando-se as duas primeiras colunas ao final da matriz.
Dessa forma, o cálculo é realizado apenas multiplicando-se os elementos da diagonal principal da matriz e suas paralelas e os elementos da diagonal secundária
e suas paralelas e subtraindo as duas como se segue:

1 2 3 1 2
A = 4 5 6 4 5
7 8 9 7 8

diagonal_principal_paralelas =
A[0][0] * A[1][1] * A[2][2] +
A[0][1] * A[1][2] * A[2][3] +
A[0][2] * A[1][3] * A[2][4]

diagonal_secundaria_paralelas =
A[0][2] * A[1][1] * A[2][0] +
A[0][3] * A[1][2] * A[2][1] +
A[0][4] * A[1][3] * A[2][2] +

det = diagonal_principal_paralelas - diagonal_secundaria_paralelas;
*/

// Pedindo ao usuário que digite os elementos da matriz A.

cout << "Digite os elementos da matriz: ";

for(int l=0;l<3;l++){
for(int c=0;c<3;c++){
cin >> A[l][c];
}
}

// Expandindo a matriz (para tal foi declarada uma matriz Aexp, que é a matriz A expandida)

for(int l=0;l<3;l++){
for(int c=0;c<3;c++){
Aexp[l][c] = A[l][c];
if(c < 2){ // se as colunas que estão sendo varridas forem as duas primeiras, copia elas para as duas ultimas da matriz
Aexp[l][c+3] = A[l][c];
}
}
}

// Exibindo a matriz A

cout << "A matriz digitada eh:\n";

for(int l=0;l<3;l++){
for(int c=0;c<3;c++){
cout << A[l][c] << " ";
}
cout << endl;
}

// Exibindo a matriz expandida

cout << "\nSua forma expandida eh:\n";

for(int l=0;l<3;l++){
for(int c=0;c<5;c++){
cout << Aexp[l][c] << " ";
}
cout << endl;
}

// calculando o somatorio da multiplicação dos elementos
// da diagonal principal

lin = col = 0;
SDP = 0;
for(int s=0;s<3;s++){
prod = 1;
for(int e=0;e<3;e++){ // produtorio dos elementos
prod = prod * Aexp[lin+e][col+e];
}
SDP = SDP + prod; // somatório dos produtorios
col++;
}

cout << "\nO somatorio da diagonal principal e suas paralelas na matriz expandida eh: " << SDP << endl;

// calculando o somatorio da multiplicação dos elementos
// da diagonal secundaria

lin = 0;
col = 2;
SDS = 0;
for(int s=0;s<3;s++){
prod = 1;
for(int e=0;e<3;e++){
prod = prod * Aexp[lin+e][col-e];
}
SDS = SDS + prod;
col++;
}

cout << "O somatorio da diagonal secundaria e suas paralelas na matriz expandida eh: " << SDS << endl;

det = SDP-SDS;
cout << "\nO determinante eh (utilizando a matriz expandida de A): " << det << endl; // exibindo o determinante

/* Forma alternativa
Como explicado em sala de aula, existe uma outra forma de realizar o cálculo do determinate sem
a utilização da matriz expandida. Para tal, é necessário fazer o programa calcular o produtorio
com os elementos corretos. Analisando o explicado no início do programa tem-se que:

O elemento A[2][3] = A[2][0]
O elemento A[1][3] = A[1][0]
O elemento A[2][4] = A[2][1]

Mas na matriz original A não existem as colunas 3 e 4. Elas são respectivamente cópias das colunas 0 e 1.
Então para resolver esse incoveniente basta fazer com que o programa acesse essas colunas em vez das colunas
3 e 4. Para tal, basta realizar o módulo por 3. Dessa forma obteremos:

A[2][3%3] = A[2][0]
A[1][3%3] = A[1][0]
A[2][4%3] = A[2][1]

*/

// calculando o somatorio da multiplicação dos elementos
// da diagonal principal utilizando apenas a matriz A

lin = col = 0;
SDP = 0;
for(int s=0;s<3;s++){
prod = 1;
for(int e=0;e<3;e++){ // produtorio dos elementos
prod = prod * A[lin+e][(col+e)%3];
}
SDP = SDP + prod; // somatório dos produtorios
col++;
}
cout << "\nO somatorio da diagonal principal e suas paralelas na matriz original eh: " << SDP << endl;

// calculando o somatorio da multiplicação dos elementos
// da diagonal secundaria utilizando apenas a matriz A

lin = 0;
col = 2;
SDS = 0;
for(int s=0;s<3;s++){
prod = 1;
for(int e=0;e<3;e++){
prod = prod * A[lin+e][(col-e)%3];
}
SDS = SDS + prod;
col++;
}

cout << "O somatorio da diagonal secundaria e suas paralelas na matriz original eh: " << SDS << endl;

det = SDP-SDS;
cout << "\nO determinante eh (utlizando apenas a matriz A): " << det << endl; // exibindo o determinante

}

User badge image

Rodrigo

Há mais de um mês

http://www.wolframalpha.com/  <--- sem dúvida o melhor para este e qqr outro problema com calculo.

Essa pergunta já foi respondida por um dos nossos especialistas