Tengo este codigo para sacar la matriz transversa de una matriz
Código C++:
Ver original#include <iostream>
#include <iomanip>
#include <vector>
#include <cmath>
#include <cstdlib>
using namespace std;
void leerDimensiones(unsigned &n, unsigned &m){
try{
cout<<"Numero de filas y columnas (0 y 0) para salir: "<<endl;
cin>>n>>m;
if(n==0 && m==0) throw string("¡Error! Matriz vacía.");
if(n<=0) throw 1;
if(m<=0) throw 2;
}catch(int e){
switch(e){
case 1:
cout<<"El numero de filas debe ser mayor a 0!"<<endl;break;
case 2:
cout<<"El numero de columnas debe ser mayor a 0!"<<endl; break;
}
leerDimensiones(n,m);
}
}
void leerlim(double &li, double &ls){
try{
cout<<"Limites inferior y superior: "<<endl;
cin>>li>>ls;
if(li>=ls) throw 1;
}catch (int e){
cout<<"El limite inferior debe ser menor al superior !"<<endl;
leerlim(li,ls);
}
}
int **randMatE(unsigned n, unsigned m, int li, int ls) {
unsigned i,j,d=ls-li; int **a;
a=new int*[n];
for (i=0;i<n;i++){
a[i]=new int[m];
for (j=0;j<m;j++)
a
[i
][j
]= (int)((double)rand()/RAND_MAX
*d
+li
);} return a;
}
void showMat(int **a, unsigned n, unsigned m){
unsigned i,j;
for (i=0;i<n;i++){
for (j=0;j<m;j++){
cout<<" "<<setw(8)<<setprecision(5)<<a[i][j];
if ((j+1)%10==0) cout<<endl;
}
cout<<endl;
}
}
int **trans(int **a, unsigned n, unsigned m) {
unsigned i,j;int **at;
at=new int *[n];
for(i=0;i<m;i++)
at[i]=new int(m);
for(i=0;i<n;i++){
for(j=0;j<m;j++)
at[j][i]=a[i][j];
}
return at;
}
int main(){
double li,ls;int **a;
unsigned n,m;
cout<<"***** Matriz traspuesta *****"<<endl;
try{
do {
leerDimensiones(n,m);
leerlim(li,ls);
a=randMatE(n,m,li,ls);
showMat(a,n,m);
a=trans(a,n,m);
cout<<"Matriz transpuesta"<<endl;
showMat(a,m,n);
} while(n!=0 && m!=0);
} catch(string &e) {
cout<<e;
}
return 0;
}
que funciona hasta que pongo matrices grandes como 15x12
creo que el error esta en la funcion:
Código C++:
Ver originalint **trans(int **a, unsigned n, unsigned m) {
unsigned i,j;int **at;
at=new int *[n];
for(i=0;i<m;i++)
at[i]=new int(m);
for(i=0;i<n;i++){
for(j=0;j<m;j++)
at[j][i]=a[i][j];
}
return at;
}
realmente no se que estoy haciendo mal...
Gracias de antemano