Logo Hardware.com.br
Robertop.
Robertop. Novo Membro Registrado
1 Mensagem 0 Curtidas

Problema para achar Determinante - C++

#1 Por Robertop. 12/06/2014 - 17:27
Olá pessoal, queria uma ajudinha com esse código, ela gera uma matriz de tamanho a ser escolhido pelo usuário com números aleatórios compreendidos entre -2 e 5, mostra a soma da diagonal principal e mostra a soma da diagonal secundária e a soma dos números positivos e era pra mostrar a determinante, só que quando fui apresentar o trabalho, o professor disse que o calculo da determinante tava errada, queria uma ajudinha de como fazer isso, pois como o trabalho foi de dupla, não foi eu quem fez essa parte.

Segue o código:


#include <iostream>
#include <stdlib.h>
#include <time.h>
using namespace std;

const int tam=50;
int v[tam][tam];

//CARREGA A MATRIZ COM VALORES ALEATÓRIOS ENTRE -2 E 5.
void carrega_matriz(int m[][50],int n){
for (int i=0;i<n;i++){
for(int j=0;j<n;j++){
m[i][j]=rand()%8 - 2;
}
}
}

//COMANDO PARA SOMAR A DIAGONAL PRINCIPAL.
void soma_diagonal_prin(int m[][50],int n){
int soma;
soma=0;
for (int i=0;i<n;i++){
for (int j=0;j<n;j++){
if (i==j)
soma=soma + m[i][j];
}
}
cout<<"Soma da diagonal principal: "<<soma<<"\n\n";
}

//COMANDO PARA SOMAR A DIAGONAL SECUNDARIA
void soma_diagonal_secun(int m[][50],int n){
int soma1;
soma1=0;
int i= n - 1;
while (i>0){
for (int j=0;j<n;j++){
soma1= soma1 + m[i][j];
i= i - 1;
}
}
cout<<"Soma da diagonal secundaria: "<<soma1<<"\n\n";
}

//COMANDO PARA SOMAR OS NUMERO POSITIVOS DA MATRIZ GERADA.
void soma_positivos(int m[][50],int n){
int soma2=0;
for (int i=0;i<n;i++){
for (int j=0;j<n;j++){
if (m[i][j]>=0)
soma2=soma2 + m[i][j];
}
}
cout<<"Soma dos numeros inteiros da Matriz: "<<soma2<<"\n\n";
}

//COMANDO PARA IMPRIMIR A MATRIZ.
void imprime(int m[][50],int n){
for (int i=0;i<n;i++){
for(int j=0;j<n;j++){
cout<<m[i][j]<<" ";
}
cout<<endl;
}
cout<<endl;
}

//COMANDO PARA MOSTRAR O VALOR DA DETERMINANTE.
void mostrar_deter(int m[][50],int n){
int determinante;
int soma;
soma=0;
for (int i=0;i<n;i++){
for (int j=0;j<n;j++){
if (i==j)
soma=soma + m[i][j];
}
}
int soma1;
soma1=0;
int i= n - 1;
while (i>0){
for (int j=0;j<n;j++){
soma1= soma1 + m[i][j];
i= i - 1;
}
}
if (soma>soma1)
determinante= soma - soma1;
else
determinante= soma1 - soma;
cout<<"Valor da determinante: "<<determinante<<"\n\n";
}

int main(){
int n;
srand(time(NULL));

cout<<"Digite o tamanho da Matriz: ";
cin>>n;
cout<<endl;

carrega_matriz(v,n);
imprime (v,n);
soma_diagonal_prin(v,n);
soma_diagonal_secun(v,n);
soma_positivos(v,n);
mostrar_deter(v,n);
system("pause&quot;
}
tpcvasco
tpcvasco General de Pijama Registrado
2.9K Mensagens 330 Curtidas
#2 Por tpcvasco
17/06/2014 - 08:36
Esse código do determinante é completamente louco, não faz sentido algum. Calcular o determinante é bem mais complexo que isso, geralmente faz-se recursivamente
http://pt.wikipedia.org/wiki/Determinante


Aproveitando, seu cálculo de diagonal principal está correto, mas ineficiente. Isso não seria bem mais eficiente?
for (int i=0. i
;-)
Analogamente, pode-se fazer o mesmo para a diagonal secundária, deixo pra vc como exercício para o cérebro.
"Milhouse: - Médicos e bombeiros são heróis.
Bart Simpson: - Olha, as casas continuam pegando fogo e as pessoas continuam doentes. Os verdadeiros heróis são os Schwarzenegger's, os Stallone's, e, em menores proporções, os Vandame's..."
© 1999-2025 Hardware.com.br. Todos os direitos reservados.
Imagem do Modal