elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  validar gato
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: validar gato  (Leído 831 veces)
lopez fer

Desconectado Desconectado

Mensajes: 3


Ver Perfil
validar gato
« en: 26 Enero 2021, 23:13 pm »

Podrian ayuderme con estre problema, soy principiante y no logro entender que debo hacer.
Como en el juego del gato, en este problema se desea verificar si en un tablero se presenta el mismo VALOR en todas las celdas de un renglón, una columna, la diagonal principal o la diagonal secundaria, para determinar si un jugador ha ganado.

A continuación se muestra un tablero de 3x3, en la cual se tienen valores 1 y 0. Se observa que en el segundo renglón, la última columna o la diagonal principal todas las celdas tienen el valor 1. En el caso del juego del gato, esto representaría que el jugador asociado al valor 1, ha ganado.

En la primer línea el valor  entero a buscar en el tablero.

En la segunda línea separados por un espacio, la cantidad 3<=n<=10 de renglones y columnas para una matriz (tablero) de forma cuadrada.

A partir de la tercera línea, se presentan separadas por un espacio los números de cada renglón de la matriz, se inicia con el renglón 0 y se termina con el renglon n-1 , y en cada renglón se inicia con la columna 0  y se termina con la columna . n-1


Se debe imprimir el número entero 1, si el valor  a buscar, se encuentra en todas las celdas de cualquier renglón, columna, diagonal principal o en la diagonal secundaria. Retorna 0 en otro caso.

Ejemplo


En línea

K-YreX
Moderador
***
Desconectado Desconectado

Mensajes: 904



Ver Perfil
Re: validar gato
« Respuesta #1 en: 27 Enero 2021, 09:12 am »

Primero, para situarnos, vemos que se habla del juego del gato (conocido también como el 3 en raya si el tablero es de 3x3). Esto se juega entre dos jugadores que ponen sus fichas en el tablero y el primero que consigue completar una fila, columna o diagonal (principal o secundaria) con sus fichas, gana. Hasta aquí todo claro.

Lo que parece que pide es un algoritmo que determine si un jugador en concreto ha ganado. Para ello tienes que pasar una entrada al programa en el formato que te dicen:
Citar
En la primer línea el valor  entero a buscar en el tablero.

En la segunda línea separados por un espacio, la cantidad 3<=n<=10 de renglones y columnas para una matriz (tablero) de forma cuadrada.

A partir de la tercera línea, se presentan separadas por un espacio los números de cada renglón de la matriz, se inicia con el renglón 0 y se termina con el renglon n-1 , y en cada renglón se inicia con la columna 0  y se termina con la columna . n-1

Suponiendo que los valores pueden ser: {0, 1, 2} para representar: {casilla vacía, jugador1, jugador2}, respectivamente.
Un ejemplo de entrada podría ser:
Código:
1 // Vamos a ver si ha ganado el jugador 1
4 // En un tablero de 4x4 cuyos valores actuales son: (Y ahora escribimos la matriz que representa el tablero)
1 0 0 2
1 1 2 2
2 1 1 2
0 0 0 1
Como se puede ver, en este caso sí ha ganado el jugador 1 porque tiene la diagonal principal completa con sus fichas. Entonces tu algoritmo tiene que devolver 1 (lo que viene a traducirse como true). En caso de que el jugador 1 no hubiese ganado (bien porque ha ganado el jugador 2 o porque no ha ganado ninguno todavía), debería devolver un 0 (que equivale a false).

No sé si este programa tienes que hacerlo en C o C++ pero una idea para empezar (en C) puede ser:
Código
  1. #define MIN_SIZE 3
  2. #define MAX_SIZE 10
  3.  
  4. // Es obligatorio indicar todas las dimensiones de un array, excepto la primera
  5. // Esta funcion comprueba si el jugador indicado ha ganado segun la matriz (tablero) indicada
  6. int comprobarGanador(int, int[][MAX_SIZE], int);
  7.  
  8.  
  9. int main(){
  10.  // La forma mas sencilla para empezar es crear una matriz con el maximo valor posible y usar solo la parte necesaria
  11.  int matriz[MAX_SIZE][MAX_SIZE];
  12.  // Aqui ya depende del formato que utilices para la entrada de datos (fichero, teclado,...)
  13.  int jugador;
  14.  // Con este bucle sigues pidiendo un valor hasta que sea valido (1 o 2)
  15.  do {
  16.    printf("Introduce el jugador a comprobar (1/2): ");
  17.    scanf("%d", &jugador);
  18.  } while(jugador != 1 && jugador != 2);
  19.  
  20.  // Hacemos lo mismo para el orden de la matriz
  21.  int orden; // A partir de ahora tenemos que usar 'orden' para recorrer la matriz porque las posiciones restantes hasta MAX_SIZE contendran basura
  22.  do {
  23.    printf("Introduce el orden del tablero [%d, %d]: ", MIN_SIZE, MAX_SIZE);
  24.    scanf("%d", &orden);
  25.  } while(orden < MIN_SIZE || orden > MAX_SIZE);
  26.  
  27.  for(int i = 0; i < orden; ++i){
  28.    printf("Introduce los valores de la fila %d: ", i);
  29.    for(int j = 0; j < orden; ++j){
  30.      scanf("%d", &matriz[i][j]); // Aunque se escriban todos los valores en una fila, scanf() va separando por espacios
  31.    }
  32.  }
  33.  
  34.  printf("El jugador %d ha ganado la partida?: %d\n", jugador, comprobarGanador(jugador, matriz, orden));
  35.  // Si vas a ejecutarlo desde la consola hay que incluir la siguiente linea para que no se cierre hasta pulsar Enter:
  36.  getchar(); // cin.get() si se hace en C++
  37.  return 0; // El return se puede omitir y el compilador lo incluye implicitamente
  38. }
  39.  
  40. int comprobarGanador(int jugador, int matriz[][MAX_SIZE], int orden){
  41.  // Aqui queda tu tarea de comprobar si el jugador indicado ha ganado o no
  42.  // Recuerda recorrer la matriz hasta la fila/columna <orden-1> y no hasta <MAX_SIZE-1> (no es lo mismo)
  43. }

Tenía ganas de escribir algo en C así que creo que con eso ya te he dejado más que suficiente... :silbar: :silbar:
Con implementar la función comprobarGanador(), el código debería funcionar correctamente (si no he olvidado nada). Luego ya puedes cambiar lo que quieras o necesites.
Si lo pruebas con el ejemplo de entrada que puse antes el resultado debería ser:
Código:
El jugador 1 ha ganado la partida?: 1


En línea

Código
  1. cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Perro o Gato?? « 1 2 3 4 »
Foro Libre
peib0l 30 12,872 Último mensaje 11 Noviembre 2010, 00:11 am
por Artikbot
Juego Gato
Java
Lain0x 2 8,363 Último mensaje 22 Marzo 2011, 05:43 am
por sapito169
la curiosidad mato al gato, alguna vez fuiste tu el gato?
Foro Libre
flacc 1 1,492 Último mensaje 27 Enero 2012, 15:09 pm
por D4RIO
Juego del gato « 1 2 »
Programación C/C++
m@o_614 13 17,271 Último mensaje 30 Abril 2012, 03:41 am
por s00rk
Gato en 3D
Programación C/C++
josemanuelbarajas998 2 1,643 Último mensaje 14 Mayo 2017, 20:07 pm
por MAFUS
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines