Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Pasar array bidimensional por parámetro

Estas en el tema de Pasar array bidimensional por parámetro en el foro de C/C++ en Foros del Web. No me aclaro con C++... Estoy intentando pasar por parámetro un array bidimensional y no puedo. Tengo una función así: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código C++: Ver ...
  #1 (permalink)  
Antiguo 29/09/2013, 09:06
 
Fecha de Ingreso: septiembre-2013
Mensajes: 19
Antigüedad: 10 años, 7 meses
Puntos: 0
Pregunta Pasar array bidimensional por parámetro

No me aclaro con C++... Estoy intentando pasar por parámetro un array bidimensional y no puedo. Tengo una función así:

Código C++:
Ver original
  1. void Ingame::mapTo(int map1[50][50])
  2. {
  3.    for(int i = 0;i<50;i++)
  4.    {
  5.       for(int j = 0;j<50;j++)
  6.       {
  7.          actualMap[i][j] = map1[i][j];
  8.       }
  9.    }
  10. }

Lo que quiero efectivamente es que el array bidimensional map1 se copie a actualMap, pero no me funciona, sin embargo el compilador no me dice que esté mal. He parado en ese punto en tiempo de ejecución y la variable map1 se muestra como un array de una dimensión.

Así llamo a la función:

Código C++:
Ver original
  1. mapTo(map1);

Creo que el fallo se puede ver fácilmente en esta imagen de depuración:



Espero que alguien sepa ayudarme.

Gracias.
  #2 (permalink)  
Antiguo 29/09/2013, 10:48
 
Fecha de Ingreso: enero-2012
Ubicación: Buenos Aires
Mensajes: 745
Antigüedad: 12 años, 3 meses
Puntos: 35
Respuesta: Pasar array bidimensional por parámetro

A mi me funciona perfectamente.
  #3 (permalink)  
Antiguo 29/09/2013, 13:51
 
Fecha de Ingreso: septiembre-2013
Mensajes: 19
Antigüedad: 10 años, 7 meses
Puntos: 0
Respuesta: Pasar array bidimensional por parámetro

Bueno, hay un pequeño matiz, empecé haciéndolo en un array de 50x50 y luego utilizo el de 8x8, pero en mi programa está en los dos sitios igual.

¿Me puedes decir en qué compilador lo has hecho? No sé si puede ser algo de eso.

¿Y cómo declaraste el array bidimensional?

Gracias.
  #4 (permalink)  
Antiguo 29/09/2013, 18:06
 
Fecha de Ingreso: enero-2012
Ubicación: Buenos Aires
Mensajes: 745
Antigüedad: 12 años, 3 meses
Puntos: 35
Respuesta: Pasar array bidimensional por parámetro

Con C y MinGW:

Código C:
Ver original
  1. #include <stdio.h>
  2.  
  3. void copyArray(int map1[50][50])
  4. {
  5.     int actualMap[50][50];
  6.     int i, j;
  7.    
  8.     for(i = 0;i<50;i++)
  9.     {
  10.         for(j = 0;j<50;j++)
  11.         {
  12.             actualMap[i][j] = map1[i][j];
  13.             /* Verificar */
  14.             printf("actualMap[%d][%d] = %d\n", i, j, actualMap[i][j]);
  15.         }
  16.     }
  17. }
  18.  
  19. int main(int agrc, char **argv)
  20. {
  21.     int map[50][50];
  22.     int i, j;
  23.    
  24.     for (i = 0; i < 50; i++)
  25.     {
  26.         for (j = 0; j < 50; j++)
  27.         {
  28.             map[i][j] = 15;
  29.         }
  30.     }
  31.    
  32.     copyArray(map);
  33.    
  34.     return 0;
  35. }
  #5 (permalink)  
Antiguo 30/09/2013, 21:57
 
Fecha de Ingreso: septiembre-2013
Mensajes: 11
Antigüedad: 10 años, 7 meses
Puntos: 0
Respuesta: Pasar array bidimensional por parámetro

ES QUE SI TE FIJAS cuando tu pasas map1[50][50] a la funcion copyArray no estas pasando la matriz, mas bien si te fijas estas pasando el DATO que hay en la posicion de la matriz en las coordenadas (50,50)... ES POR ESO QUE NO TE MARCA ERROR EL COMPILADOR por que tu error es de logica (no estas planteando correctamente lo que tu programa necesita para llevar acabo correctamente el proceso de esa funcion). La solucion para pasar la matriz seria mandar como parametros el nombre de la matriz, el numero de columnas y el numero de filas algo asi Ejmplo: copyArray(map1, filas,columans); (como consejo define el tamaño de tu matriz en esas dos variables(int filas =50,int columnas=50) desde el incio de tu programa en el main o como variables globales digo no es muy recomendable pero por practicidad hazlo asi y ya despues que sepas un poquillo mas lo vas hacer mas elegentemente :) ).

pd espero a verte ayduado
  #6 (permalink)  
Antiguo 02/10/2013, 10:15
 
Fecha de Ingreso: enero-2012
Ubicación: Buenos Aires
Mensajes: 745
Antigüedad: 12 años, 3 meses
Puntos: 35
Respuesta: Pasar array bidimensional por parámetro

Me parece que no es como vos decis. Un array es un puntero al primer elemento del array, por lo qur en realidad sí estoy pasando el array y no únicamente su valor. Además, el código funciona perfectamente bien.

  #7 (permalink)  
Antiguo 02/10/2013, 21:54
 
Fecha de Ingreso: septiembre-2013
Mensajes: 11
Antigüedad: 10 años, 7 meses
Puntos: 0
Respuesta: Pasar array bidimensional por parámetro

Carbon: tu codigo esta muy bien CARBON simpre y cuando sea en C, nuestro amigo lo que ocupa es hacerlo mismo que tu hiciste con tu codigo pero... en C++ y recuerda que C y C++ son lenguajes muy diferentes por que manejan tipo de programacion distinta en C++ se ocupa una programacion orientada a objetos el codigo que le ayudaria a nuestro amigo seria el siguiente.

Código C++:
Ver original
  1. #include <iostream>
  2. #include <cstdlib>
  3.  
  4. using namespace std;
  5.  
  6.  
  7.      
  8.      
  9.       class Ingame{
  10.            
  11.             public:
  12.                    Ingame();
  13.                    void mapTo();
  14.                    
  15.             private:
  16.                     int filas;
  17.                     int columnas;
  18.                     int map1[50][50];
  19.            
  20.            
  21.             };
  22.   Ingame::Ingame()
  23. {
  24.  
  25.  
  26.     int i, j;
  27.    
  28.     this->filas = 50;
  29.     this->columnas = 50;
  30.    
  31.     for (i = 0; i < filas; i++)
  32.     {
  33.         for (j = 0; j < columnas; j++)
  34.         {
  35.             this->map1[i][j] = 15;
  36.         }
  37.     }
  38.    
  39. }
  40.  
  41.  
  42.  
  43. void Ingame::mapTo()
  44. {
  45.     int actualMap[filas][columnas];
  46.     int i, j;
  47.    
  48.     for(i = 0;i<filas;i++)
  49.     {
  50.         for(j = 0;j<columnas;j++)
  51.         {
  52.             actualMap[i][j] = map1[i][j];
  53.              
  54.             cout << "actualMap" << "[" << i+1 << "]" << "[" << j+1 << "]" << "=" << actualMap[i][j] << endl;
  55.         }
  56.     }
  57. }
  58.  
  59.  
  60.  
  61. int main(int agrc, char **argv)
  62. {
  63.    
  64.     Ingame obj;
  65.    
  66.     obj.mapTo();
  67.    
  68.     system("pause");
  69.  
  70.    
  71.     return 0;
  72. }


Desarrolle este peque;o codigo considerando que pues el amigo esta usando la clase Ingame y la funcion miembro mapTo

Aclaro que me faltaron muchas practicas de buena programación pero en esencia asi es como se lleva acabo la construcción de un programa en C++ Y q tanto "el constructor",y demás variables que use unas se pueden declarar const y otras define etc pero debido a que solo me estoy basando en el peque;o ejemplo que el amigo puso considero que por ahi va lo que desea por que segun yo interpreto que esta usando clases y funciones miembro .El IDE que uso es Netbeans y lenguaje pos C++.

Última edición por FjZOOM; 03/10/2013 a las 00:26
  #8 (permalink)  
Antiguo 03/10/2013, 07:26
Avatar de L3m0n  
Fecha de Ingreso: diciembre-2011
Mensajes: 219
Antigüedad: 12 años, 4 meses
Puntos: 46
Respuesta: Pasar array bidimensional por parámetro

No es obligatorio programar con objetos en C++, ni es una mejor o peor práctica. C++ es un lenguaje a gusto del consumidor, quieres usar objetos, usalos, no quieres, pues no. Y así con muchas cosas.
  #9 (permalink)  
Antiguo 03/10/2013, 19:08
 
Fecha de Ingreso: septiembre-2013
Mensajes: 11
Antigüedad: 10 años, 7 meses
Puntos: 0
Respuesta: Pasar array bidimensional por parámetro

Bueno no creo que hayan creado C++ para seguir utilizando programcion estructurada en ese caso se hubieran quedado en C.
  #10 (permalink)  
Antiguo 03/10/2013, 19:38
 
Fecha de Ingreso: enero-2012
Ubicación: Buenos Aires
Mensajes: 745
Antigüedad: 12 años, 3 meses
Puntos: 35
Respuesta: Pasar array bidimensional por parámetro

Cita:
Iniciado por FjZOOM Ver Mensaje
Carbon: tu codigo esta muy bien CARBON simpre y cuando sea en C, nuestro amigo lo que ocupa es hacerlo mismo que tu hiciste con tu codigo pero... en C++ y recuerda que C y C++ son lenguajes muy diferentes por que manejan tipo de programacion distinta en C++ se ocupa una programacion orientada a objetos el codigo que le ayudaria a nuestro amigo seria el siguiente.

Código C++:
Ver original
  1. #include <iostream>
  2. #include <cstdlib>
  3.  
  4. using namespace std;
  5.  
  6.  
  7.      
  8.      
  9.       class Ingame{
  10.            
  11.             public:
  12.                    Ingame();
  13.                    void mapTo();
  14.                    
  15.             private:
  16.                     int filas;
  17.                     int columnas;
  18.                     int map1[50][50];
  19.            
  20.            
  21.             };
  22.   Ingame::Ingame()
  23. {
  24.  
  25.  
  26.     int i, j;
  27.    
  28.     this->filas = 50;
  29.     this->columnas = 50;
  30.    
  31.     for (i = 0; i < filas; i++)
  32.     {
  33.         for (j = 0; j < columnas; j++)
  34.         {
  35.             this->map1[i][j] = 15;
  36.         }
  37.     }
  38.    
  39. }
  40.  
  41.  
  42.  
  43. void Ingame::mapTo()
  44. {
  45.     int actualMap[filas][columnas];
  46.     int i, j;
  47.    
  48.     for(i = 0;i<filas;i++)
  49.     {
  50.         for(j = 0;j<columnas;j++)
  51.         {
  52.             actualMap[i][j] = map1[i][j];
  53.              
  54.             cout << "actualMap" << "[" << i+1 << "]" << "[" << j+1 << "]" << "=" << actualMap[i][j] << endl;
  55.         }
  56.     }
  57. }
  58.  
  59.  
  60.  
  61. int main(int agrc, char **argv)
  62. {
  63.    
  64.     Ingame obj;
  65.    
  66.     obj.mapTo();
  67.    
  68.     system("pause");
  69.  
  70.    
  71.     return 0;
  72. }


Desarrolle este peque;o codigo considerando que pues el amigo esta usando la clase Ingame y la funcion miembro mapTo

Aclaro que me faltaron muchas practicas de buena programación pero en esencia asi es como se lleva acabo la construcción de un programa en C++ Y q tanto "el constructor",y demás variables que use unas se pueden declarar const y otras define etc pero debido a que solo me estoy basando en el peque;o ejemplo que el amigo puso considero que por ahi va lo que desea por que segun yo interpreto que esta usando clases y funciones miembro .El IDE que uso es Netbeans y lenguaje pos C++.
Perdón, pensé que te referías a mi código, como te referiste a la función copyArray.

  #11 (permalink)  
Antiguo 03/10/2013, 22:01
 
Fecha de Ingreso: julio-2011
Ubicación: guadalajara mX
Mensajes: 84
Antigüedad: 12 años, 9 meses
Puntos: 6
Respuesta: Pasar array bidimensional por parámetro

bueno estoy en pañales en esto de programar pero a mi me parece que deves hacer esto

void copyArray(int map1[50][50]) ---->> void copyArray(int map1[][])

borrar las dimensiones de la matriz, ya me diras si eso funciona
estoy estudiando struct y asi paso los parametros y me funcionan bien
  #12 (permalink)  
Antiguo 04/10/2013, 02:34
 
Fecha de Ingreso: septiembre-2013
Mensajes: 19
Antigüedad: 10 años, 7 meses
Puntos: 0
Respuesta: Pasar array bidimensional por parámetro

Gracias a todos por comentar.

Carbon es verdad que tu código me ha funcionado en un proyecto nuevo, pero así no me funciona en mi programa tal como lo tengo estructurado, quizás por ahí venga el fallo.

FjZOOM el problema de hacerlo como lo haces es que necesito pasar un mapa por parámetro ya que tengo muchos y utilizo esta función para decirle al programa que mapa toca pintar. Al principio puse un switch para cada mapa, pero era enorme y trabajoso, por eso opté por una forma similar a esta, pero no termino de lograrlo.

polpolpol no me funcionó eso.

Seguramente en mi código haya muchas cosas mejorables, pero es mi primer intento de juego en C++ y voy mejorándolo según voy consiguiendo las cosas.

Etiquetas: funcion, int
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 04:13.