Alguien sabe hacer la traspuesta de una matriz?

nosic
03 de Mayo del 2004
pues eso, el usuario define una matriz (tb define el nº de filas y columnas), y ala, a calcular la traspuesta, alguien sabria hacerlo???

javier
03 de Mayo del 2004
Pero debo ingresar el numero de filas y columnas, luego los datos, transponerla, e imprimirla, ademas debe ser haber sido declarada dinamicamente con el malloc.
[email protected] .....GRACIAS

noel solw
03 de Mayo del 2004
Te envio un programa para la trasposicion de una matriz dinamica.
Observa que la matriz debe ser cuadrada.
El programa esta escrito para C++ con new y delete.
Si quieres usar malloc, deberas usar tambien free y por supuesto cambiar las ordenes cout y cin, por las correspondientes en C.

// program matrix.cpp
// use dinamic matrix.
// este programa traspone una unica matriz.

#include <iomanip.h>
#include <iomanip.h>
#include <stdlib.h>

int GetDim()
{
int dim = -1;
while(dim <= 0)
{
cout << "get matrix dimention : ";
cin >> dim;
}
cout << endl;
return dim;
} // GET DIM

void Show(int *a,int N,char *msg)
{
cout << msg << " : " << endl << endl;
for(int i = 0;i < N;i++)
{
for(int j = 0;j < N;j++)
cout << setw(5) << a[N*i+j];
cout << endl;
}
cout << endl << endl;
} // SHOW

void Transposition(int *a,int N)
{
int holder;
for(int i = 1;i < N;i++)
for(int j = 0;j <= i-1;j++)
{
holder = a[N*i+j];
a[N*i+j] = a[N*j+i];
a[N*j+i] = holder;
}
} // TRANSPOSITION

void main()
{
int dim = GetDim();
int *a = new int[dim*dim];
randomize();
for(int i = 0;i < dim*dim;i++)
a[i] = random(30);
Show(a,dim,"source matrix");
Transposition(a,dim);
Show(a,dim,"transposed matrix");
cout << "end of program - good bye ! ! !" << endl;
delete []a;
} // MAIN

noel solw
03 de Mayo del 2004
ayer escribi dos veces este texto y las dos veces no
consegui enviarte la nota. expero tener mas exito
hoy.

para una matriz dada a[M][N], la transpuesta es otra
matriz b[N][M], tal que las columnas de b sean iguales
a las filas de a, y viceversa.

const int M = 2,N = 5;
int a[M][N] = {0,1,2,3,4,5,6,7,8,9}, b[N][M];
for(int i = 0;i < M;i++)
for(int j = 0;j < N;j++)
b[j][i] = a[i][j];

noel solw
03 de Mayo del 2004
en una nota tuya, anterior, vi que enviaste una programa bastante largo como mensaje.
como se hace ?