Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: DarkItachi en 22 Julio 2009, 22:19 pm



Título: Algoritmo movimiento caballo ajedrez
Publicado por: DarkItachi en 22 Julio 2009, 22:19 pm
Bueno estoy haciendo un programa que me diga que combinaciones puede hacer un caballo en un tablero vacio segun unas coordenadas. Pero me falla por ejemplo al dar las coordenadas (6,2), os dejo el code a ver si me lo podéis arreglar y de paso si queréis optimizarlo un poquito porfavor.
Gracias.

PD: Seguro que es alguna tontería ya veréis pero no consigo verla.

Código
  1. /*
  2. Autor: El Aprendiz
  3. Fecha: 22-07-09
  4. Version: 1.0
  5. Resumen: Programa que calcula los posibles movimientos
  6. de un caballo en un tablero de ajedrez vacio y imprime
  7. las posiciones posibles en pantalla.
  8. */
  9. #include <iostream>
  10. using namespace std;
  11. void caballo(int,int);
  12. int main()
  13. {
  14.      int x,y;
  15.      cout<<"Introduzca pos. x: "; cin>>x;
  16.      cout<<endl<<"Introduzca pos. y: "; cin>>y;
  17.      cout<<endl; caballo(x,y); cout<<endl;
  18.      system("pause");
  19. }
  20. void caballo(int x,int y)
  21. {
  22.     int t=0;
  23.     if (x-2>=0 && y-1<=7) { cout<<++t<<" - ("<<x-2<<","<<y-1<<")"<<endl; }
  24.     if (x-2>=0 && y+1<=7) { cout<<++t<<" - ("<<x-2<<","<<y+1<<")"<<endl; }
  25.     if (x-1>=0 && y+2<=7) { cout<<++t<<" - ("<<x-1<<","<<y+2<<")"<<endl; }
  26.     if (x+1>=0 && y+2<=7) { cout<<++t<<" - ("<<x+1<<","<<y+2<<")"<<endl; }
  27.     if (x+2>=0 && y+1<=7) { cout<<++t<<" - ("<<x+2<<","<<y+1<<")"<<endl; }
  28.     if (x+2>=0 && y-1<=7) { cout<<++t<<" - ("<<x+2<<","<<y-1<<")"<<endl; }
  29.     if (x+1>=0 && y-2<=7) { cout<<++t<<" - ("<<x+1<<","<<y-2<<")"<<endl; }
  30.     if (x-1>=0 && y-2<=7) { cout<<++t<<" - ("<<x-1<<","<<y-2<<")"<<endl; }
  31. }
  32.  


Título: Re: Algoritmo movimiento caballo ajedrez
Publicado por: Eliptico en 22 Julio 2009, 23:21 pm
¡¡¡Buenas!!!

Tienes que asegurarte de que ambas, x e y, coordenadas estan en el rango correcto. Las comprobaciones que has hecho no son completas.

¡¡¡Un saludo!!!


Título: Re: Algoritmo movimiento caballo ajedrez
Publicado por: DarkItachi en 22 Julio 2009, 23:38 pm
Eso es ya cuando optimizo, yo me refiero en que algo falla en algoritmo.


Título: Re: Algoritmo movimiento caballo ajedrez
Publicado por: Eliptico en 23 Julio 2009, 14:55 pm
Pues a eso me refiero.

Que te aseguras de que x sea mayor o igual que cero, y de que y sea menor que 8, pero ambas coordenadas deben estar en el tablero, uego x tambien debera ser menor que ocho e y mayor o igual que cero.

Repasa el codigo.


Título: Re: Algoritmo movimiento caballo ajedrez
Publicado por: Kasswed en 23 Julio 2009, 16:14 pm
Deberías comprobar que al hacer la resta siga quedando en un rango >= 0.

Porque si metes por ejemplo las coordenadas (1,1) está claro que el caballo se puede mover, pero tu programa te va a decir que se puede mover para todos los sitios, ya que resta 1-2=-1, que es <=7, pero no >=0.

También lo tienes que tener en cuenta al sumar. Si consideramos la primera coordenada (0,0), entonces la última es (7,7), así que 6+2=8, que no está dentro del rango. Tienes que comprobar que (x+2)<=7.

Saludos.


Título: Re: Algoritmo movimiento caballo ajedrez
Publicado por: DarkItachi en 24 Julio 2009, 13:19 pm
Vaya fallo más tonto lol xD No lo veía, gracias, os dejo el code terminado:

Código
  1. /*Autor: El Aprendiz
  2. Fecha: 22-07-09
  3. Version: 1.0
  4. Resumen: Programa que calcula los posibles movimientos
  5. de un caballo en un tablero de ajedrez vacio y imprime
  6. las posiciones posibles en pantalla.
  7. */
  8. #include <iostream>
  9. using namespace std;
  10. void caballo(int,int);
  11. int main()
  12. {
  13.      int x,y;
  14.      cout<<"Introduzca pos. x: "; cin>>x;
  15.      cout<<endl<<"Introduzca pos. y: "; cin>>y;
  16.      cout<<endl; caballo(x,y); cout<<endl;
  17.      system("pause");
  18. }
  19. void caballo(int x,int y)
  20. {
  21.     int t=0;
  22.     if ((x-2>=0 && x-2<=7) && (y-1>=0 && y-1<=7)) { cout<<++t<<" - ("<<x-2<<","<<y-1<<")"<<endl; }
  23.     if ((x-2>=0 && x-2<=7) && (y+1>=0 && y+1<=7)) { cout<<++t<<" - ("<<x-2<<","<<y+1<<")"<<endl; }
  24.     if ((x-1>=0 && x-1<=7) && (y+2>=0 && y+2<=7)) { cout<<++t<<" - ("<<x-1<<","<<y+2<<")"<<endl; }
  25.     if ((x+1>=0 && x+1<=7) && (y+1>=0 && y+2<=7)) { cout<<++t<<" - ("<<x+1<<","<<y+2<<")"<<endl; }
  26.     if ((x+2>=0 && x+2<=7) && (y+1>=0 && y+1<=7)) { cout<<++t<<" - ("<<x+2<<","<<y+1<<")"<<endl; }
  27.     if ((x+2>=0 && x+2<=7) && (y-1>=0 && y-1<=7)) { cout<<++t<<" - ("<<x+2<<","<<y-1<<")"<<endl; }
  28.     if ((x+1>=0 && x+1<=7) && (y-2>=0 && y-2<=7)) { cout<<++t<<" - ("<<x+1<<","<<y-2<<")"<<endl; }
  29.     if ((x-1>=0 && x-1<=7) && (y-2>=0 && y-2<=7)) { cout<<++t<<" - ("<<x-1<<","<<y-2<<")"<<endl; }
  30. }
  31.  
  32.  


Título: Re: Algoritmo movimiento caballo ajedrez
Publicado por: denix en 28 Noviembre 2011, 22:27 pm
.