






Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity
Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium
Prepara tus exámenes
Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity
Prepara tus exámenes con los documentos que comparten otros estudiantes como tú en Docsity
Encuentra los documentos específicos para los exámenes de tu universidad
Estudia con lecciones y exámenes resueltos basados en los programas académicos de las mejores universidades
Responde a preguntas de exámenes reales y pon a prueba tu preparación
Consigue puntos base para descargar
Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium
Comunidad
Pide ayuda a la comunidad y resuelve tus dudas de estudio
Ebooks gratuitos
Descarga nuestras guías gratuitas sobre técnicas de estudio, métodos para controlar la ansiedad y consejos para la tesis preparadas por los tutores de Docsity
sudoku FP programacion básica practica 2
Tipo: Resúmenes
1 / 12
Esta página no es visible en la vista previa
¡No te pierdas las partes importantes!







Fecha de entrega: 5 de mayo de 2019
El Sudoku (en japonés, 数独) es un rompecabezas matemático de colocación que se hizo popular en Japón a finales del siglo XX y que cuenta con muchos adeptos en todo el mundo desde hace años.
Su resolución requiere paciencia y ciertas dotes lógicas, y tradicionalmente consiste en rellenar un tablero de 99 celdas, es decir 81 casillas, dividido en regiones o cajas de 33 con las cifras del 1 al 9 partiendo de algunos números ya dispuestos en algunas de las casillas.
La única regla que hay que respetar a la hora de resolver un Sudoku es que no se repita ninguna cifra en una misma fila, columna o región. Suena sencillo, ¿verdad?, pero que no te engañe, el grado de dificultad puede llegar a ser diabólico.
A continuación tienes un Sudoku de nivel de dificultad bajo y su solución.
Tablero de partida
Juego resuelto
El objetivo de esta práctica es desarrollar una aplicación que nos permita resolver sudokus, llevar un registro de jugadores con sus puntuaciones y registrar nuevos sudokus para resolver.
En esta práctica hay que ir desarrollando de manera incremental un programa que permita resolver sudokus así como mantener un registro de jugadores. Además los usuarios podrán incorporar nuevos sudokus con los que desafiar a otros jugadores.
La aplicación, nada más arrancar, deberá cargar desde archivos de texto, en listas en memoria, el registro de jugadores así como la colección de sudokus entre los que se podrá elegir para jugar.
Si las cargas se han podido realizar, se presentará un menú principal que, de forma cíclica y hasta que no se solicite finalizar la ejecución, permitirá elegir entre:
1.- Jugar
2.- Ver jugadores ordenados por identificador
3.- Ver jugadores ordenados por puntos
4.- Incorporar sudoku
0.- Salir
Si alguna carga no tiene éxito la aplicación deberá finalizar.
Opción Jugar
Si el usuario elige la opción de jugar se le mostrará la lista de sudokus entre los que puede elegir. El sudoku elegido se cargará desde archivo y después se mostrará un menú secundario que también actuará de forma cíclica hasta que el usuario elija abortar la resolución del sudoku y volver al menú principal, y cuyas opciones son:
1.- Ver posibles valores de una casilla vacía 2.- Colocar valor en una casilla 3.- Borrar valor de una casilla 4.- Reiniciar el tablero 5.- Autocompletar celdas simples 0.- Abortar la resolución y volver al menú principal
Además de salir de este menú secundario a demanda del jugador (opción 0), también se saldrá automáticamente cuando el jugador haya terminado de rellenar el tablero. En este segundo caso, antes regresar al menú principal, se solicitará al jugador su identificador y se actualizará su información en la lista que contiene el registro de jugadores. La actualización puede consistir en aumentar su puntuación con los nuevos puntos obtenidos (si el jugador se encontraba ya en la lista) o en incorporarlo a la lista con la puntuación obtenida.
En esta primera versión al arrancar la aplicación se cargará únicamente la colección de sudokus. Si la carga se puede realizar, se presentará un menú principal que, de forma cíclica y hasta que no se solicite finalizar la ejecución, permitirá elegir entre un número de opciones reducido a:
1.- Jugar
0.- Salir
En esta primera versión de la práctica la opción Jugar debe comportarse como se ha indicado en el apartado 1 salvo que no se realizará la actualización de la lista de jugadores en caso de éxito. En lugar de actualizar la lista (que ni siquiera se habrá cargado) simplemente se mostrará por pantalla un mensaje indicando los puntos obtenidos (caso de haber completado el sudoku). Por su parte, la opción Salir simplemente finalizará la ejecución pues la colección de sudokus cargada no habrá sufrido ningún cambio.
La colección de sudokus estará compuesta por un máximo de 20 sudokus. La información disponible acerca de cada sudoku será el nº de puntos que permite obtener al resolverlo y el nombre del archivo que contiene una representación del tablero del sudoku. La colección de sudokus se encontrará en el archivo listaSudokus.txt que a lo sumo tendrá la información de 20 sudokus. Cada línea de dicho archivo contiene la información de un sudoku (primero el nombre del archivo y después el nº de puntos). La colección almacenada en el archivo estará ordenada ascendentemente por el nº de puntos y, a igualdad en el nº de puntos, ascendentemente por el nombre del archivo^1
Por lo que respecta al formato y contenido de los archivos que albergan los tableros de los sudokus, cada línea contiene una cadena de 9 caracteres que representa una fila del tablero. La siguiente imagen es la del archivo que contendría el tablero de partida del sudoku mostrado al inicio de este enunciado.
(^1) Esta ordenación no es relevante para esta primera versión de la práctica pero sí lo será para la segunda.
2.1.Detalles de implementación
Se deben desarrollar módulos para los diferentes tipos y sus operaciones asociadas. A modo de breve análisis de los diferentes tipos necesarios téngase en cuenta que:
Contendrá un tipo de datos tTablero que representa el tablero de un sudoku mediante una matriz cuadrada cuyos elementos son de tipo tCasilla. Se incluirán, al menos, las siguientes operaciones:
En esta segunda versión se desarrollará la funcionalidad completa de la aplicación descrita en el apartado 1.
La lista de jugadores se cargará desde el archivo listaJugadores.txt donde en cada línea aparece la información de un jugador: primero su identificador y después el número de puntos que ha conseguido hasta el momento. El listado de jugadores del archivo está ordenado alfabéticamente por el identificador de los jugadores y ese orden se debe mantener en memoria. No puede haber dos jugadores en la lista con el mismo identificador. En esta versión el archivo listaJugadores.txt guardará información para un máximo de 10 jugadores.
3.1.Detalles de implementación
Se deben desarrollar módulos para los nuevos tipos que esta versión requiere y para sus operaciones asociadas:
Módulo ListaJugadores
Incluirá un tipo de datos tListaJugadores que permita guardar en memoria la información de una lista de hasta MAX_JUGADORES jugadores (MAX_JUGADORES = 10). Cada elemento de esta lista será, por tanto, de tipo tJugador. Deberá incluir además la implementación de, al menos, las siguientes operaciones:
La funcionalidad de esta última versión de la práctica es la misma que la de la versión 2 pero se usará memoria dinámica para la lista de jugadores (en concreto la
lista de jugadores usará un array dinámico de punteros a datos de tipo tJugador) y se deberá implementar de forma recursiva algún algoritmo concreto.
En esta versión no hay un número límite de jugadores almacenados en el archivo listaJugadores.txt.
4.1.Detalles de implementación
A continuación se indican aquellos módulos que sufren cambios en esta última versión así como indicaciones para la detección de fugas de memoria.
Módulo Jugador
Deberá incorporarse la definición de un tipo tJugadorPtr que represente punteros a datos de tipo tJugador.
Módulo ListaJugadores
Deberá cambiarse la definición del tipo tListaJugadores de forma que ahora esté sustentado por un array dinámico cuyas componentes sea de tipo tJugadorPtr e incluya además la dimensión que en cada momento de la ejecución tiene el array dinámico. La dimensión inicial será de 5 elementos. De esta forma la dimensión del array que sustenta la lista ya no será un impedimento a la hora de incorporar a un nuevo jugador: si la lista está llena simplemente se redimensionará el array a uno mayor y seguidamente se incluirá el nuevo jugador en el punto adecuado de la lista.
Deben incorporarse, al menos, las siguientes operaciones:
Además deben actualizarse adecuadamente las implementaciones de todos los subprogramas de este módulo que puedan verse influenciados por la nueva definición del tipo tListaJugadores. Adicionalmente debe sustituirse la implementación iterativa de la búsqueda binaria del subprograma bool buscar(const tListaJugadores & lista, string id, int & pos) desarrollada en la versión 2 por una implementación recursiva.
Detección de fugas de memoria
La aplicación no puede tener fugas de memoria. Para llevar un control de las fugas de memoria se debe hacer lo siguiente: