Ver Mensaje Individual
  #1 (permalink)  
Antiguo 19/06/2012, 20:15
drd222
 
Fecha de Ingreso: marzo-2012
Mensajes: 30
Antigüedad: 12 años, 1 mes
Puntos: 0
Programa matriz transversa c++

Tengo este codigo para sacar la matriz transversa de una matriz
Código C++:
Ver original
  1. #include <iostream>
  2.     #include <iomanip>
  3.     #include <vector>
  4.     #include <cmath>
  5.     #include <cstdlib>
  6.     using namespace std;
  7.      
  8.     void leerDimensiones(unsigned &n, unsigned &m){
  9.         try{
  10.             cout<<"Numero de filas y columnas (0 y 0) para salir: "<<endl;
  11.             cin>>n>>m;
  12.             if(n==0 && m==0) throw string("¡Error! Matriz vacía.");
  13.             if(n<=0) throw 1;
  14.             if(m<=0) throw 2;
  15.         }catch(int e){
  16.             switch(e){
  17.             case 1:
  18.                 cout<<"El numero de filas debe ser mayor a 0!"<<endl;break;
  19.             case 2:
  20.                 cout<<"El numero de columnas debe ser mayor a 0!"<<endl; break;
  21.             }
  22.             leerDimensiones(n,m);
  23.         }
  24.     }
  25.      
  26.     void leerlim(double &li, double &ls){
  27.         try{
  28.             cout<<"Limites inferior y superior: "<<endl;
  29.             cin>>li>>ls;
  30.             if(li>=ls) throw 1;
  31.         }catch (int e){
  32.             cout<<"El limite inferior debe ser menor al superior !"<<endl;
  33.             leerlim(li,ls);
  34.         }
  35.     }
  36.      
  37.     int **randMatE(unsigned n, unsigned m, int li, int ls) {
  38.         unsigned i,j,d=ls-li; int **a;
  39.         a=new int*[n];
  40.         for (i=0;i<n;i++){
  41.             a[i]=new int[m];
  42.             for (j=0;j<m;j++)
  43.                 a[i][j]= (int)((double)rand()/RAND_MAX*d+li);}
  44.         return a;
  45.     }
  46.      
  47.     void showMat(int **a, unsigned n, unsigned m){
  48.         unsigned i,j;
  49.         for (i=0;i<n;i++){
  50.             for (j=0;j<m;j++){
  51.                 cout<<" "<<setw(8)<<setprecision(5)<<a[i][j];
  52.                 if ((j+1)%10==0) cout<<endl;
  53.             }
  54.             cout<<endl;
  55.         }
  56.     }
  57.      
  58.      
  59.     int **trans(int **a, unsigned n, unsigned m) {
  60.         unsigned i,j;int **at;
  61.         at=new int *[n];
  62.         for(i=0;i<m;i++)
  63.             at[i]=new int(m);
  64.         for(i=0;i<n;i++){
  65.             for(j=0;j<m;j++)
  66.                 at[j][i]=a[i][j];
  67.         }
  68.         return at;
  69.     }
  70.      
  71.     int main(){
  72.         double li,ls;int **a;
  73.         unsigned n,m;
  74.         cout<<"***** Matriz traspuesta *****"<<endl;
  75.         try{
  76.             do {
  77.                 leerDimensiones(n,m);
  78.                 leerlim(li,ls);
  79.                 a=randMatE(n,m,li,ls);
  80.                 showMat(a,n,m);
  81.                 a=trans(a,n,m);
  82.                 cout<<"Matriz transpuesta"<<endl;
  83.                 showMat(a,m,n);
  84.             } while(n!=0 && m!=0);
  85.         } catch(string &e) {
  86.             cout<<e;
  87.         }
  88.         return 0;
  89.     }

que funciona hasta que pongo matrices grandes como 15x12
creo que el error esta en la funcion:
Código C++:
Ver original
  1. int **trans(int **a, unsigned n, unsigned m) {
  2.     unsigned i,j;int **at;
  3.     at=new int *[n];
  4.     for(i=0;i<m;i++)
  5.         at[i]=new int(m);
  6.     for(i=0;i<n;i++){
  7.         for(j=0;j<m;j++)
  8.             at[j][i]=a[i][j];
  9.     }
  10.     return at;
  11. }
realmente no se que estoy haciendo mal...
Gracias de antemano