martes, 13 de diciembre de 2011

Matriz, traspuesta y su producto.


/*Calcula la traspuesta de una matriz y luego el producto de esa matriz y su traspuesta*/
#include <iostream>
#define DIM 3 //Aqui decides la dimension, no lo se hacer como lo intentabas
void matriz_traspuesta(float A[DIM][DIM], float At[DIM][DIM]);
void producto_matriz(float A[DIM][DIM], float At[DIM][DIM]);
using namespace std;
int main()
{
int i, j;
float A[DIM][DIM], At[DIM][DIM];
cout << "Introduce la matriz:\n";
for(i=0;i<DIM;i++)
{
cout << "Introduce la fila "<<i+1<<": ";
for (j=0;j<DIM;j++)
{
cin >> A[i][j];
}
}
for(i=0;i<DIM;i++) //inicializo At con todos los elementos 0 para que lo pueda coger la funcion
{
for (j=0;j<DIM;j++)
{
At[i][j]=0;
}
}
matriz_traspuesta(A, At);
producto_matriz(A, At);
return 0;
}
void matriz_traspuesta(float A[DIM][DIM],float At[DIM][DIM]) //he quitado B, pues solo la usamos en la ultima funcion
{
int i,j;
cout<<"La matriz traspuesta es: \n"; //para copiar los elementos de la matriz y escribirlos en pantalla
for (i=0;i<DIM;i++) //hay que hacer lo mismo que cuando la escribimos, un bucle for
{
for(j=0;j<DIM;j++)
{
At[i][j]=A[j][i];
cout<<At[i][j]<<"\t"; // el \t es para que los elementos esten separados
}
cout<<"\n"; //para que salte de linea cada fila
}
}
void producto_matriz(float A[DIM][DIM], float At[DIM][DIM])
{
int i, j, k, elemento=0, B[DIM][DIM]; //este bucle es el mas dificil y lioso de hacer
for(i=0; i<DIM; i++)
{
for(j=0; j<DIM; j++)
{
for(k=0; k<DIM; k++)
{
elemento=elemento+(A[i][k])*(At[k][j]);
}
B[i][j]=elemento;
elemento=0;
}
}
cout<<"el producto de las matrices anteriores es\n";
for(i=0; i<DIM; i++)
{
for(j=0; j<DIM; j++)
{
cout<<B[i][j]<<"\t";
}
cout<<endl;
}
}

No hay comentarios:

Publicar un comentario