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

Ayuda matrics - Alfil

Estas en el tema de Ayuda matrics - Alfil en el foro de C/C++ en Foros del Web. hola a todos! me dejaron hacer el movimiento de un alfil en un tablero de 9 por 9 representado con una matriz de ceros .........se ...
  #1 (permalink)  
Antiguo 23/10/2008, 10:46
 
Fecha de Ingreso: agosto-2008
Ubicación: Mi casa!!! Perú-Aqp
Mensajes: 28
Antigüedad: 15 años, 8 meses
Puntos: 0
Ayuda matrics - Alfil

hola a todos! me dejaron hacer el movimiento de un alfil en un tablero de 9 por 9 representado con una matriz de ceros .........se le da la posicion y el programa dicuja unos en las posibles soluciones para el alfil osea en diagonales....
estuve pensando en como hacer eso peor no me sale :( por fa alguna idea y yo lo implemento!!
  #2 (permalink)  
Antiguo 27/10/2008, 19:39
 
Fecha de Ingreso: septiembre-2007
Mensajes: 52
Antigüedad: 16 años, 7 meses
Puntos: 2
Respuesta: Ayuda matrics - Alfil

Cita:
Iniciado por zare Ver Mensaje
hola a todos! me dejaron hacer el movimiento de un alfil en un tablero de 9 por 9 representado con una matriz de ceros .........
(..)
por fa alguna idea y yo lo implemento!!
Hola.

Pueden haber muchas formas de solucionar este problema, pero te voy a dar la primera sugerencia que se me ocurre.

Digamos que tienes un tablero en una variable como int tablero[9][9] y las variables m y n que indican la fila y columna dentro de la matriz en donde se ubica el alfil. Entonces podrías comenzar por considerar por ejemplo cuáles son las posiciones que representen las casillas del tablero por las que pasa el alfil si empieza a moverse en diagonal hacia la derecha y abajo.

Por ejemplo, digamos que m=3 y n=5. Entonces, si el alfil empieza a moverse hacia la derecha y abajo, las posiciones por las que va a pasar son:

3, 5
4, 6
5, 7
6, 8

En (6,8) debe detenerse ya que ese es el borde del tablero (las columnas de la matriz van desde 0 hasta 8).

Entonces, en relación a las variables m y n, el movimiento del alfil en esta diagonal, sería así:

m, n
m + 1, n + 1
m + 2, n + 2
m + 3, n + 3

Eso es todo, ahí está el corazón del asunto y es lo que tiene que quedarte claro para poder implementar la solución ya en C. Si entiendes bien esto, entonces puedes pasar a analizar cómo sería el desplazamiento si el alfil se mueve en otras direcciones (a la derecha y arriba, a la izquierda y arriba, y a la izquierda y abajo).

Para darte una mano, te voy a mostrar un pedacito de lo que podría ser una implementación de esta idea que describí arriba:

Código C:
Ver original
  1. /*
  2.  * Recibe una matriz de enteros, presumiblemente llena de ceros,
  3.  * que representa un tablero de ajedrez de 9*9, y dos valores m y n, que
  4.  * indican la fila y columna donde se ubica un alfil.
  5.  *
  6.  * Esta funcion asigna 1 a las posiciones de la matriz que correspondan a
  7.  * posibles posiciones hacia donde se puede desplazar el alfil.
  8.  */
  9. void llenar_posiciones_alfil (int tablero[9][9], int m, int n)
  10. {
  11.     int i;
  12.  
  13.     /* Movimientos hacia la derecha y abajo */
  14.     for (i = 0; m + i < 9 && n + i < 9; i++)
  15.         tablero[m + i][n + i] = 1;
  16.  
  17.     /* Movimientos hacia la derecha y arriba */
  18.     for (i = 0; m - i >= 0 && n + i < 9; i++)
  19.         tablero[m - i][n + i] = 1;
  20.  
  21.     /* Movimientos hacia la izquierda y arriba */
  22.  
  23.     /* Movimientos hacia la izquierda y abajo*/
  24. }

Los últimos dos ciclos no los escribí para que tengas la oportunidad de pensarlos y escribirlos tú mismo :). Espero que te sea de ayuda.
  #3 (permalink)  
Antiguo 01/11/2008, 12:18
 
Fecha de Ingreso: agosto-2008
Ubicación: Mi casa!!! Perú-Aqp
Mensajes: 28
Antigüedad: 15 años, 8 meses
Puntos: 0
Respuesta: Ayuda matrics - Alfil

void llenar_posiciones_alfil (int **tablero, int m, int n)
{

int i;
/* Movimientos hacia la derecha y abajo */
for (i = 0; m + i < 9 && n + i < 9; i++)
{
tablero[m + i][n + i] = 1;
}
/* Movimientos hacia la derecha y arriba */
for (i = 0; m - i >= 0 && n + i < 9; i++)
{
tablero[m - i][n + i] = 1;
}
/*movimientoss hacia izquierda arriba*/
for (i = 0; m - i >= 0 && n + i < 9; i++)
{
tablero[m - i][n - i] = 1;
}
/*movimiento hacia la izquierda abajo*/

for (i = 0; m + i < 9 && n + i < 9; i++)
{
tablero[m + i][n - i] = 1;
}
}



graciassssssssssssss ia m salio y como tenia ya el de la torre asi hago el d la reina !! gracias le hic la prueba de escritorio y lo entendi :)
  #4 (permalink)  
Antiguo 01/11/2008, 12:43
 
Fecha de Ingreso: septiembre-2007
Mensajes: 52
Antigüedad: 16 años, 7 meses
Puntos: 2
Respuesta: Ayuda matrics - Alfil

Cita:
Iniciado por zare Ver Mensaje
gracias le hic la prueba de escritorio y lo entendi :)
De nada, me alegra que lo hayas entendido sin problemas.

De todas formas, mirando tu código, veo que te ha faltado modificar otra cosa muy pequeña pero muy importante: las condiciones que van dentro de los for().

Consideremos por ejemplo este ciclo:

Código:
	/*movimientos hacia izquierda arriba*/
	for (i = 0; m - i >= 0 && n + i < 9; i++)       
	{
		tablero[m - i][n - i] = 1;    
	}
En él, a m y n se les resta una cantidad determinada por la variable i. Ahora bien, tanto m-i como n-i deben caer dentro del tablero, es decir, deben estar dentro del rango 0 a 8. Como estás restando, no hay que preocuparse porque exceda 8, pero sí hay que asegurarse de que no caigan por debajo de 0.

Fíjate bien en la condición del for. El segmento m-i >= 0 está bien, pero ¿será que n+i < 9 también es correcto para este caso?

Yo creo que vas a ver el problema de inmediato, pero si no es así, haz una prueba de escritorio, asumiendo que la función recibe como parámetros m=3 y n=1.
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 16:43.