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

Ayuda con programa C++

Estas en el tema de Ayuda con programa C++ en el foro de C/C++ en Foros del Web. Hola! Tengo un problema que me esta volviendo loca con 2 variables que cambian de valor sin venir a cuento, y ya no sé cómo ...
  #1 (permalink)  
Antiguo 13/03/2011, 06:01
 
Fecha de Ingreso: septiembre-2010
Mensajes: 7
Antigüedad: 13 años, 7 meses
Puntos: 0
Ayuda con programa C++

Hola!

Tengo un problema que me esta volviendo loca con 2 variables que cambian de valor sin venir a cuento, y ya no sé cómo resolverlo.

Lo que estoy haciendo es un tablero que represento con la clase Board, que es una matriz 4x4 de estructuras. Las estructuras representan celdas de un tablero de ajedrez, que estan formadas por 2 booleanos, uno que es true cuando se supone q hay una ficha puesta, y otra que es true cuando no hay ninguna otra pieza que amenace esa casilla.

Tengo que ir probando recursivamente qué diferentes soluciones puede tener este problema (es el de las 8 reinas, pero con 4, no sé si os suena). Para eso ejecuto la siguiente funcion.


Código C++:
Ver original
  1. void Board::putNextQueen(int i, int j)
  2. {
  3.     for (int n = i; n < 4; n++)
  4.     {
  5.         for (int m = j; m < 4; m++)
  6.         {
  7.             cout << "n = " << n << ", m = " << m;
  8.  
  9.             if (this->squares[n][m].isSafe)
  10.             {
  11.                 cout << " is safe " << endl;
  12.  
  13.                 Board newBoard;
  14.  
  15.                 newBoard.copySquares(this->squares);
  16.                 newBoard.put(n, m);
  17.                 newBoard.putNextQueen(n,m);
  18.             }
  19.             else
  20.                 cout << "is NOT safe " << endl;
  21.         }
  22.     }
  23. }
El problema está en que n y m, que inicialmente valen 0 y 0 respectivamente, cambian inexplicablemente de valor a 187182783 (o algo parecido) al hacer
Código C++:
Ver original
  1. Board newBoard;

Os copio a continuación el constructor de la clase, que crea un board vacío.

Código C++:
Ver original
  1. Board::Board()
  2. {
  3.         Square square;
  4.         square.hasQueen = false;
  5.         square.isSafe = true;
  6.         for (int i = 0; i <= 4; i++)
  7.         {
  8.             for (int j = 0; j <= 4; j++)
  9.             {
  10.                 squares[i][j] = square;
  11.             }
  12.         }
  13. }
¿Qué estoy haciendo mal? Seguro que es algo más obvio de lo que creo, pero yo no encuentro el problema y no sé como esquivarlo!

Espero que me podáis ayudar. Muchas gracias por adelantado!

Última edición por pj_soles; 13/03/2011 a las 09:55
  #2 (permalink)  
Antiguo 13/03/2011, 13:36
 
Fecha de Ingreso: marzo-2011
Mensajes: 54
Antigüedad: 13 años, 1 mes
Puntos: 11
Respuesta: Ayuda con programa C++

Has probado a poner las variables como unsigned int e inicializarlas a 0? es algo que me ha solido pasar a mi bastante :P
  #3 (permalink)  
Antiguo 13/03/2011, 16:25
 
Fecha de Ingreso: septiembre-2010
Mensajes: 7
Antigüedad: 13 años, 7 meses
Puntos: 0
Respuesta: Ayuda con programa C++

Muchísimas gracias!! Ha funcionado! :))
  #4 (permalink)  
Antiguo 13/03/2011, 16:34
 
Fecha de Ingreso: septiembre-2010
Mensajes: 7
Antigüedad: 13 años, 7 meses
Puntos: 0
Respuesta: Ayuda con programa C++

Cita:
Iniciado por pj_soles Ver Mensaje
Muchísimas gracias!! Ha funcionado! :))
Vale, no, falsa alarma, me sigue pasando lo mismo
  #5 (permalink)  
Antiguo 14/03/2011, 05:44
 
Fecha de Ingreso: febrero-2011
Ubicación: Paraguay
Mensajes: 59
Antigüedad: 13 años, 2 meses
Puntos: 1
Respuesta: Ayuda con programa C++

Has probado con declarar las variables n y m fuera del for??
  #6 (permalink)  
Antiguo 14/03/2011, 07:16
 
Fecha de Ingreso: septiembre-2010
Mensajes: 7
Antigüedad: 13 años, 7 meses
Puntos: 0
Respuesta: Ayuda con programa C++

Sí, he probado a ponerlas como unsigned int fuera del for, pero aún así me seguía pasando lo mismo.

Última edición por pj_soles; 14/03/2011 a las 07:32
  #7 (permalink)  
Antiguo 14/03/2011, 07:41
Avatar de Heimish2000  
Fecha de Ingreso: enero-2011
Ubicación: Madrid
Mensajes: 844
Antigüedad: 13 años, 3 meses
Puntos: 89
Respuesta: Ayuda con programa C++

No tendras declaradas n y m como variables de clase, ¿no?
  #8 (permalink)  
Antiguo 14/03/2011, 07:49
 
Fecha de Ingreso: septiembre-2010
Mensajes: 7
Antigüedad: 13 años, 7 meses
Puntos: 0
Respuesta: Ayuda con programa C++

No no, la n y la m sólo las uso en esa función. No tengo ahora el código a mano, pero luego lo pego entero a ver si me podeis iluminar :)
  #9 (permalink)  
Antiguo 18/03/2011, 08:04
 
Fecha de Ingreso: junio-2010
Ubicación: Madrid
Mensajes: 620
Antigüedad: 13 años, 11 meses
Puntos: 73
Respuesta: Ayuda con programa C++

Código C++:
Ver original
  1. Board::Board()
  2. {
  3.         Square square;
  4.         square.hasQueen = false;
  5.         square.isSafe = true;
  6.         for (int i = 0; i <= 4; i++)
  7.         {
  8.             for (int j = 0; j <= 4; j++)
  9.             {
  10.                 squares[i][j] = square;
  11.             }
  12.         }

Para i y j, has puesto de 0 a 4 inclusive, lo que hace un total de 5 elementos, con lo que estás manejando una matriz de 5x5 elementos en lugar de una de 4x4 elementos, que es la que citas en tu consulta. Recuerda que, en C / C++, los índices para las matrices van de 0 a N-1 para una dimensión de N elementos.

Etiquetas: programa
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 11:26.