Os dejo aquí un programa que me creé para calcular determinantes de matrices NxN. Personalmente no me gustan los algoritmos recursivos, pero funcionan de maravilla en este caso :)
#include <cstdlib>
#include <iostream>
using namespace std;
void MostrarMatriz(int** Matriz,unsigned int MAX);
void Leer_matriz(int** a,unsigned int MAX);
int CalcularDeterminante(int** Matriz,unsigned int MAX);
int main(int argc, char *argv[])
{
int Tamanyo;
while(1)
{
cout<<"Indica el tamanyo de la matriz: ";
cin>>Tamanyo;
if (Tamanyo < 2)
Tamanyo = 2;
cout<<endl<<"Inserta los elementos de la matriz: "<<endl<<endl;
int** Matriz;
Matriz = new int*[Tamanyo];
for (int i = 0; i<Tamanyo; i++)
Matriz[i] = new int[Tamanyo];
Leer_matriz(Matriz,Tamanyo);
cout<<endl<<endl<<endl;
MostrarMatriz(Matriz,Tamanyo);
cout<<endl<<endl<<endl;
cout<<"El determinante es: "<<CalcularDeterminante(Matriz,Tamanyo);
cout<<endl<<endl<<endl;
system("PAUSE");
system("PAUSE");
system("CLS");
}
return EXIT_SUCCESS;
}
int CalcularDeterminante(int** Matriz,unsigned int MAX)
{
if (MAX == 2)
{
return (Matriz[0][0]*Matriz[1][1] - Matriz[0][1]*Matriz[1][0]);
}
else
{
int Actual = 0;
int k = 0;
int Numero = 0;
short Multriplicador;
int** Buffer; // Creo una nueva matriz para hacer los adjuntos
Buffer = new int*[MAX-1];
for (int i = 0; i<(MAX-1); i++)
Buffer[i] = new int[MAX-1];
for (int l = 0; l < MAX; l++) // Desarrollo por filas
{
for (int j = 1; j < MAX; j++) // Creo una nueva matriz adjunta
{
for (int i = 0; i < MAX; i++)
{
if (i != l)
{
Buffer[k][j-1] = Matriz[i][j];
k++;
}
}
k = 0;
}
if ( l % 2 != 0)
Multriplicador = -1;
else
Multriplicador = 1;
Numero += (Matriz[l][0]*CalcularDeterminante(Buffer,MAX-1)*Multriplicador);
}
return Numero;
}
}
void MostrarMatriz(int** Matriz,unsigned int MAX)
{
for (int j = 0; j < MAX; j++)
{
cout<<endl<<" ( ";
for (int i = 0; i < MAX; i++)
cout<<Matriz[i][j]<<" ";
cout<<") ";
}
}
void Leer_matriz(int** a,unsigned int MAX)
{
int i,j;
for (j = 0; j < MAX; j++)
for (i = 0; i < MAX; i++)
{
cout<<"Introduce el numero para la posicion ("<<i<<","<<j<<") "<<endl;
cin>>a[i][j];
}
}
Consejos, mejoras ;)
Cita de: amchacon en 12 Febrero 2013, 21:39 PM
Os dejo aquí un programa que me creé para calcular determinantes de matrices NxN. Personalmente no me gustan los algoritmos recursivos, pero funcionan de maravilla en este caso :)
Consejos, mejoras ;)
Y tanto que funciona bien ¡ ¡ ¡Sólo unas pequeñas observaciones:
* Si el tamaño es 1 el determinante es el número y en tu código lo transformas automáticamente en un determinante de 2x2.
* Cambiaría, para que no resulte "espesa" la entrada de datos y que los índices sean "matemáticos" (no se suele usar en cálculo (0,0) sino (1,1) para la primera posición):
void Leer_matriz(int** a,unsigned int MAX)
{
int i,j;
cout<<"Introduce el numero para la posicion: "<<endl;
for (j = 0; j < MAX; j++)
for (i = 0; i < MAX; i++)
{
cout<<" ("<<i+1<<","<<j+1<<") = ";
cin>>a[i][j];
}
}
Como ves, chorradas al fin y al cabo.Saluditos!.
P.D:Y gracias por compartir ;-) ;-) ;-)