Ver Mensaje Individual
  #4 (permalink)  
Antiguo 19/06/2012, 12:26
drd222
 
Fecha de Ingreso: marzo-2012
Mensajes: 30
Antigüedad: 12 años, 1 mes
Puntos: 0
Respuesta: error en tipo de datos matriz c++

Muchas gracias por las respuestas ... ya entendi mejor el uso de estas variables... ahora no se por que este programa no me funciona aca el codigo... Creo que es algun error de logica en la funcion "**trans" si me pudieran ayudar les agradeceria ... aca el codigo completo... El programa debe devolver la matriz transversa... El programa funciona hasta que pongo numeros muy grandes para las filas y columnas de la matriz por ej 15 y 12

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. }