• Jueves 2 de Mayo de 2024, 22:10

Autor Tema:  Dimensiones En Tiempo De Ejecucion¿?  (Leído 2411 veces)

CodigoDavid

  • Nuevo Miembro
  • *
  • Mensajes: 21
    • Ver Perfil
Dimensiones En Tiempo De Ejecucion¿?
« en: Lunes 4 de Julio de 2005, 08:14 »
0
No hay alguna manera de decidir el numero de dimensiones de una matriz dinamica en tiempo de ejecucion? esto es, tranquilamente se puede hacer esto en C++:

void AsignarMemoria(int *&destino, int numElementos)
{
   destino = new[numElementos];
}


pero, claro, hay alguna manera de averiguar el numero de dimensiones dentro de una funcion? el numero de elementos no, reitero que me refiero a las DIMENSIONES, esto es, la diferente cantidad de corchetes, pero no solo eso, ¿como le asigno las dimensiones si tan solo son corchetes?(creo que no se puede)
y entonces, y por eso he pedido que entre JuanK, ¿la unica alternativa es hacerlo del modo "cochino"?(JuanK lo entendera, lo de "cochino".....)¿?help meeeeeee!!!!!!!!!

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Dimensiones En Tiempo De Ejecucion¿?
« Respuesta #1 en: Lunes 4 de Julio de 2005, 10:22 »
0
¿Seguro que te hace falta? No estaria mal que dieras un ejemplo de uso para verlo mas claro.

Código: Text
  1.  
  2. void AsignarMemoria(int *&destino, int numElementos)
  3. {
  4.   destino = new int [numElementos];
  5. }
  6.  
  7.  

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

CodigoDavid

  • Nuevo Miembro
  • *
  • Mensajes: 21
    • Ver Perfil
Re: Dimensiones En Tiempo De Ejecucion¿?
« Respuesta #2 en: Lunes 4 de Julio de 2005, 19:22 »
0
Cita de: "Eternal Idol"
¿Seguro que te hace falta? No estaria mal que dieras un ejemplo de uso para verlo mas claro.

Código: Text
  1.  
  2. void AsignarMemoria(int *&destino, int numElementos)
  3. {
  4.   destino = new int [numElementos];
  5. }
  6.  
  7.  
Hombre, pues claro que seria util, por que uno no se tendria que limitar a hacer funciones como:


CreaMatriz2D
CreaMatriz3D
CreaMatriz4D
..........................................


lo que yo quiero es poder elegir al momento de llamar a la funcion el numero de dimensiones de la matriz, vamos, que no me conformo con solo poder elegir el numero de elementos, y por eso pregunto si solo se puede hacer de una manera "cochina", esto es, simulando la matriz con un unico vector de una dimension y metiendo ahy todos los elementos y luego simularlo todo por medio de aritmetica......., en definitiva, que soy un inconformista y quiero una funcion parecida a una cosa asin:


LeeMatriz(10, 40, 69, 33...);


como se ve, la funcion tendria un numero indefinido de argumentos(como el prinft), entonces, para que lo entendais, el primer argumento de la funcion de arriba, el 10, significa que habria 10 elementos de 40*69*33 cada uno, el 40 es la otra dimension, el 69 la otra etc etc etc etc, esto para mi hacerlo es facil, pero el problema, como hos digo, es como le digo internamente a la funcion el numero de dimensiones, y por eso creo que solo se puede hacer de manera "cochina", si, vale, no me conformo con poca cosa, lo reconozco, pero me gusta hacer funciones muy potentes...........

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Dimensiones En Tiempo De Ejecucion¿?
« Respuesta #3 en: Lunes 4 de Julio de 2005, 19:35 »
0
¿Como harias para asignar uno de estos arrays de varias dimensiones dinamicamente?  :whistling:

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

CodigoDavid

  • Nuevo Miembro
  • *
  • Mensajes: 21
    • Ver Perfil
Re: Dimensiones En Tiempo De Ejecucion¿?
« Respuesta #4 en: Martes 5 de Julio de 2005, 16:01 »
0
Cita de: "Eternal Idol"
¿Como harias para asignar uno de estos arrays de varias dimensiones dinamicamente?  :whistling:
 :alien:  :alien:  :alien: Joder, como quieres que lo sepa si es lo que estoy preguntando yo?(si he entendido bien tu pregunta claro........), haver, yo se que por ejemplo, para crear una matriz de 2 dimensiones dinamicamente, se haria asi:


int main()
{
   int **matriz2D = 0;

   *matriz2D = new int[2];
   matriz2D[0] = new int[1024];
   matriz2D[1] = new int[768];
}

y yo lo que quiero es poder asignarle memoria a la matriz que se le pase como argumento a la funcion, pero no me quiero limitar a funciones que ya tengan establecido el numero de dimensiones, esto es, que solo puedan reservar memoria para matrizes de 2, 3 o 4 dimensiones, yo lo que quiero es que le puedan reservar memoria a cualquier matriz, tengan 1 o tengan 3 o tengan 40 dimensiones........supongo que ahora me e explicado bien........

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Dimensiones En Tiempo De Ejecucion¿?
« Respuesta #5 en: Martes 5 de Julio de 2005, 17:14 »
0
A ver que te parece esta solucion usando parametros variables standard:

Código: Text
  1.  
  2. void AsignarMemoria(int **&destino, int dimensiones, ...)
  3. {
  4.   int elementos = 0;
  5.   va_list marker;
  6.  
  7.   va_start(marker, dimensiones);
  8.   destino = (int**)new int [dimensiones];
  9.   for(int x = 0; x < dimensiones; x++)
  10.   {
  11.     elementos = va_arg(marker, int);
  12.     destino[x] = new int[elementos];  
  13.   }
  14.   va_end(marker);
  15. }
  16.  
  17.  

Se la llamaria asi:
Código: Text
  1.  
  2. int **matriz2D = 0;
  3. AsignarMemoria(matriz2D, 2, 1024, 768);
  4.  
  5.  

Por cierto en el codigo que dejaste antes sobra un * en *matriz2D = new int[2];

 :smartass:

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.