SlideShare una empresa de Scribd logo
1 de 5
Descargar para leer sin conexión
Práctica 1 -         Sudoku
                            Estructura de Datos
                                  2009-2010



   Objetivos:    Aprender a programar una clase sencilla en C++ y a manejar
algunos contenedores de la STL.


   Tareas a realizar:    El alumno deberá entregar los códigos necesarios para
jugar al   Sudoku (http://es.wikipedia.org/wiki/Sudoku).       El tablero inicial
se generará aleatoriamente (ver Apéndice). El tablero de juego debe permitir
guardar en cada celda varios números como posibles opciones según indique el
jugador.


   Para este juego se utilizarán dos TADs:


     celda:   Clase que implementa una celda de un tablero.


     sudoku:   Clase que se encarga del juego y conoce sus reglas.




   Ficheros a entregar:

     celda.h
     Especicación de la clase que corresponde a una celda de un tablero. Una
     celda contiene un valor y un conjunto de opciones de valores para esta
     celda. Una celda vacía se representa como una celda cuyo valor es cero.
     Una celda puede ser ja, es decir, su valor no puede ser modicado una
     vez que es introducido. El invariante de la clase celda especica que si una
     celda no está vacía entonces el conjunto de opciones debe estar vacío.


     sudoku.h
     Especicación de la clase encargada del juego. Un sudoku contiene un
     tablero de celdas de tamaño 9×9 y una pila de jugadas. El tablero puede
     tener tanto celdas jas como modicables. El invariante de la clase especi-
     ca que cada celda del tablero y cada elemento de la lista de opciones de la
     celda debe tener valores entre 0 y 9 en donde el cero representa una celda
     vacía. Además no puede haber en una misma la, columna o bloque dos
     valores iguales, ni en la celda ni en la lista de opciones de la misma. Un
     bloque se dene como una matriz de 3×3. Un sudoku contiene 9 bloques,
     como se puede ver en el siguiente esquema:




                                       1
_ _ _      2 1 _   _ _ _
     9 _ _      _ 7 _   5 _ _
     _ 2 _      5 3 _   _ 9 4

     _ 9 _      _ _ _   _ 4 7
     _ _ _      1 _ 4   _ 5 _
     _ _ _      _ _ _   _ _ _

     _ _ _      _ 5 _   3 1 _
     5 _ 7      _ _ _   _ _ _
     8 _ 1      _ _ _   _ 6 _



     celda.cpp
     Implementación de la clase que controla una celda.


     sudoku.cpp
     Implementación de la clase encargada del juego.



     juego.cpp
     Contiene el main encargado de producir la interfaz entre el juego y el
     jugador. Este archivo debe contener el menu para jugar conteniendo, al
     menos, las siguientes opciones:


     1   -   Agregar opcion a una celda.
     2   -   Borrar opcion de una celda
     3   -   Fijar valor a una celda.
     4   -   Borrar valor de una celda.
     5   -   Verificar factible.
     6   -   Deshacer.
     7   -   Salir.


   Requisitos:     El TDA   celda   debe contener, entre otros,   al menos   los sigu-
ientes métodos:


     celda()
     Constructor por defecto de la clase que inicializa la celda vacía.


     bool fijar_valor(const unsigned int dato,
                      const bool fija = false)
     Función que introduce un valor en una celda e indica si el mismo es o no
     jo. Si la celda ya es ja entonces no se puede modicar y por tanto la
     función devuelve   false.   En caso contrario devuelve   true.
     void borrar_valor()
     Procedimiento que borra el contenido de una celda.


     unsigned int valor() const
     Función que devuelve el valor que aloja la celda.



                                         2
bool valida() const
  Función que devuelve true           si la celda no está vacía y   false   en caso con-
  trario.


  bool nueva_opcion(const unsigned int dato)
  Función que guarda una nueva opción en la celda. Si el dato ya existe en
  el conjunto de posibles opciones, entonces devuelve          false,   sino devuelve
  true.
  bool borrar_opcion(const unsigned int dato)
  Función que borra una opción de la celda. Si el dato no existe en el conjunto
  de posibles opciones, entonces devuelve         false,   sino devuelve    true.
  setunsigned int opciones() const
  Función que devuelve las opciones de la celda.


Además se debe realizar la siguiente sobrecarga:


  ostream operator(ostream os, const celda c)
  Sobrecarga del operador  para la clase celda. Este operador                mostrará
  solamente el valor denitivo si es valido, sino deberá mostrar un  _. No
  se mostrarrán las opciones de la celda.



El TDA      sudoku debe contener, entre otros, al menos       los siguientes métodos:


  sudoku(const string file)
  Constructor de la clase que inicializa el juego con un tablero dado por
  archivo (ver Apéndice).


  bool fijar_valor(const unsigned int fila,
                   const unsigned int columna,
                   const unsigned int valor)
  Esta función ja el valor dado en la celda ubicada en la posición (-
  la,columna) del tablero en caso de que la jugada sea valida, en cuyo caso
  se devolverá    true,   o   false   en caso contrario.


  void borrar_valor(const unsigned int fila,
                    const unsigned int columna)
  Procedimiento que elimina el valor de la celda ubicada en la posición
  (la,columna) del tablero.


  bool finalizado() const
  Función que devuelve true            si el juego ha nalizado, es decir, todas las
  celdas contienen valores y éstos son válidos según las reglas del juego.


  listunsigned int opciones(const unsigned int fila,
                              const unsigned int columna) const
  Función que devuelve las opciones que ha dejado el jugador guardadas la
  celda ubicada en la posición (la,columna) del tablero.


  bool nueva_opcion(const unsigned int fila,
                    const unsigned int columna,
                    const unsigned int valor)

                                           3
Función que guarda un nuevo valor en las opciones de la celda ubicada en
     la posición (la,columna) del tablero. Si el dato ya existe en las opciones
     de la celda, entonces devuelve   false,   sino devuelve   true.
     bool borrar_opcion(const unsigned int fila,
                        const unsigned int columna,
                        const unsigned int valor)
     Función que borra el valor indicado de las opciones de la celda ubicada en
     la posición (la,columna) del tablero. Si el dato no existe en las opciones
     de la celda, entonces devuelve   false,   sino devuelve   true.
     const celda valor(const unsigned int fila,
                       const unsigned int columna) const
     Función que devuelve la celda ubicada en la posición (la,columna) del
     tablero.

     bool es_factible(const unsigned int fila,
                       const unsigned int columna,
                       const unsigned int valor) const
     Función que devuelve true si el valor dado puede ubicarse         en la celda
     ubicada en la posición (la,columna) del tablero según las reglas del juego.

     bool undo()
     Función que deshace la ultima jugada. En el caso en que no haya más
     jugadas para deshacer la función devuelve     false   sino devuelve   true.
   Además se debe realizar la siguiente sobrecarga:

     ostream operator(ostream os, const sudoku c)
     Sobrecarga del operador  para la clase sudoku. Se muestran           tanto el
     tablero como las opciones alojadaas en cada una de las celdas.



Apéndice
Generación de tableros aleatorios (http://davidbau.com/downloads/sudoku.py):

   Para generar tableros aleatorios se puede utilizar el programa      sudoku.py.
Tan solo ejecutando   python sudoku.py      genera un puzzle nuevo. El formato de
los archivos que se pueden utilizar es como el siguiente:


PUZZLE:
_ _ _ 2 1 _      _ _ _
9 _ _ _ 7 _      5 _ _
_ 2 _ 5 3 _      _ 9 4

_ 9 _   _ _ _    _ 4 7
_ _ _   1 _ 4    _ 5 _
_ _ _   _ _ _    _ _ _

_ _ _   _ 5 _    3 1 _
5 _ 7   _ _ _    _ _ _
8 _ 1   _ _ _    _ 6 _

                                        4
RATING: 1.5

  Sudoku resuelto:


PUZZLE:
4 5 8 2 1 9     6 7 3
9 1 3 4 7 6     5 8 2
7 2 6 5 3 8     1 9 4

1 9 5   8 6 3   2 4 7
3 7 2   1 9 4   8 5 6
6 8 4   7 2 5   9 3 1

2 4 9   6 5 7   3 1 8
5 6 7   3 8 1   4 2 9
8 3 1   9 4 2   7 6 5

RATING: 1.5




                        5

Más contenido relacionado

La actualidad más candente

Clase6 collections
Clase6 collectionsClase6 collections
Clase6 collectionsjorg_marq
 
Xna game studio presentación 04
Xna game studio   presentación 04Xna game studio   presentación 04
Xna game studio presentación 04Juan Cardona
 
Descubriendo scala
Descubriendo scalaDescubriendo scala
Descubriendo scalanluaces
 
Problemas condicionales
Problemas condicionalesProblemas condicionales
Problemas condicionalesJoshe Varillas
 
Java AWT Tres en Raya
Java AWT Tres en RayaJava AWT Tres en Raya
Java AWT Tres en Rayajubacalo
 
Java Applet:::Pelota que rebota en un recinto.
Java Applet:::Pelota que rebota en un recinto.Java Applet:::Pelota que rebota en un recinto.
Java Applet:::Pelota que rebota en un recinto.jubacalo
 
Ejercisos condicionales
Ejercisos condicionalesEjercisos condicionales
Ejercisos condicionalesJoshe Varillas
 
Control JTable con base de datos.pdf
Control JTable con base de datos.pdfControl JTable con base de datos.pdf
Control JTable con base de datos.pdfJhiZzelh T Cz
 
Xna game studio presentación 05
Xna game studio   presentación 05Xna game studio   presentación 05
Xna game studio presentación 05Juan Cardona
 
Programación de Videojuegos con Python y Pilas (VI)
Programación de Videojuegos con Python y Pilas (VI)Programación de Videojuegos con Python y Pilas (VI)
Programación de Videojuegos con Python y Pilas (VI)Fernando Salamero
 
Python3000
Python3000Python3000
Python3000wozgeass
 
Lección No. 1 de Python
Lección No. 1 de PythonLección No. 1 de Python
Lección No. 1 de PythonVictor Pando
 
Java::Acceso a Bases de Datos
Java::Acceso a Bases de DatosJava::Acceso a Bases de Datos
Java::Acceso a Bases de Datosjubacalo
 
Proyecto tres en_raya_f_inal_mathias_y_grupo
Proyecto tres en_raya_f_inal_mathias_y_grupoProyecto tres en_raya_f_inal_mathias_y_grupo
Proyecto tres en_raya_f_inal_mathias_y_grupoRobertho Mathias
 

La actualidad más candente (20)

Clase6 collections
Clase6 collectionsClase6 collections
Clase6 collections
 
Xna game studio presentación 04
Xna game studio   presentación 04Xna game studio   presentación 04
Xna game studio presentación 04
 
Descubriendo scala
Descubriendo scalaDescubriendo scala
Descubriendo scala
 
Problemas condicionales
Problemas condicionalesProblemas condicionales
Problemas condicionales
 
Java AWT Tres en Raya
Java AWT Tres en RayaJava AWT Tres en Raya
Java AWT Tres en Raya
 
Java Applet:::Pelota que rebota en un recinto.
Java Applet:::Pelota que rebota en un recinto.Java Applet:::Pelota que rebota en un recinto.
Java Applet:::Pelota que rebota en un recinto.
 
Ejercisos condicionales
Ejercisos condicionalesEjercisos condicionales
Ejercisos condicionales
 
Hechos en clase
Hechos en claseHechos en clase
Hechos en clase
 
Control JTable con base de datos.pdf
Control JTable con base de datos.pdfControl JTable con base de datos.pdf
Control JTable con base de datos.pdf
 
Xna game studio presentación 05
Xna game studio   presentación 05Xna game studio   presentación 05
Xna game studio presentación 05
 
Programación de Videojuegos con Python y Pilas (VI)
Programación de Videojuegos con Python y Pilas (VI)Programación de Videojuegos con Python y Pilas (VI)
Programación de Videojuegos con Python y Pilas (VI)
 
Cesar lenguaje c_
Cesar lenguaje c_Cesar lenguaje c_
Cesar lenguaje c_
 
Python3000
Python3000Python3000
Python3000
 
Control jtable con base de datos
Control jtable con base de datosControl jtable con base de datos
Control jtable con base de datos
 
Control jtable con base de datos
Control jtable con base de datosControl jtable con base de datos
Control jtable con base de datos
 
Lección No. 1 de Python
Lección No. 1 de PythonLección No. 1 de Python
Lección No. 1 de Python
 
Java::Acceso a Bases de Datos
Java::Acceso a Bases de DatosJava::Acceso a Bases de Datos
Java::Acceso a Bases de Datos
 
Python03
Python03Python03
Python03
 
Ejercicios Python parte 4
Ejercicios Python parte 4Ejercicios Python parte 4
Ejercicios Python parte 4
 
Proyecto tres en_raya_f_inal_mathias_y_grupo
Proyecto tres en_raya_f_inal_mathias_y_grupoProyecto tres en_raya_f_inal_mathias_y_grupo
Proyecto tres en_raya_f_inal_mathias_y_grupo
 

Similar a Sudoku (20)

Gráficos en MATLAB
Gráficos en MATLABGráficos en MATLAB
Gráficos en MATLAB
 
Tortugarte 2
Tortugarte 2Tortugarte 2
Tortugarte 2
 
Tortugarte 2
Tortugarte 2Tortugarte 2
Tortugarte 2
 
Biblioteca java.util por gio
Biblioteca java.util por gioBiblioteca java.util por gio
Biblioteca java.util por gio
 
U5. Arreglos de Objetos.pdf
U5. Arreglos de Objetos.pdfU5. Arreglos de Objetos.pdf
U5. Arreglos de Objetos.pdf
 
Matlab_basic.pptx
Matlab_basic.pptxMatlab_basic.pptx
Matlab_basic.pptx
 
Evaluacion decimo d
Evaluacion decimo dEvaluacion decimo d
Evaluacion decimo d
 
Manual de c
Manual de cManual de c
Manual de c
 
Curso de Macros Excel
Curso de Macros ExcelCurso de Macros Excel
Curso de Macros Excel
 
Arreglos y matrices
Arreglos y matricesArreglos y matrices
Arreglos y matrices
 
Codigo Explicado Rompe Bloques.docx
Codigo Explicado Rompe Bloques.docxCodigo Explicado Rompe Bloques.docx
Codigo Explicado Rompe Bloques.docx
 
3 desarollo manejo datos capitulo 2 -01 arreglos dos dimensiones (2)
3 desarollo manejo datos capitulo 2 -01 arreglos dos dimensiones (2)3 desarollo manejo datos capitulo 2 -01 arreglos dos dimensiones (2)
3 desarollo manejo datos capitulo 2 -01 arreglos dos dimensiones (2)
 
3 desarollo manejo datos capitulo 2 -01 arreglos dos dimensiones (5)
3 desarollo manejo datos capitulo 2 -01 arreglos dos dimensiones (5)3 desarollo manejo datos capitulo 2 -01 arreglos dos dimensiones (5)
3 desarollo manejo datos capitulo 2 -01 arreglos dos dimensiones (5)
 
1.2. kotlin
1.2. kotlin1.2. kotlin
1.2. kotlin
 
Modulo3
Modulo3Modulo3
Modulo3
 
Programacion
ProgramacionProgramacion
Programacion
 
Programacion
ProgramacionProgramacion
Programacion
 
Practica13
Practica13Practica13
Practica13
 
PRACTICA 13 ALICE
PRACTICA 13 ALICEPRACTICA 13 ALICE
PRACTICA 13 ALICE
 
Temaswing
TemaswingTemaswing
Temaswing
 

Sudoku

  • 1. Práctica 1 - Sudoku Estructura de Datos 2009-2010 Objetivos: Aprender a programar una clase sencilla en C++ y a manejar algunos contenedores de la STL. Tareas a realizar: El alumno deberá entregar los códigos necesarios para jugar al Sudoku (http://es.wikipedia.org/wiki/Sudoku). El tablero inicial se generará aleatoriamente (ver Apéndice). El tablero de juego debe permitir guardar en cada celda varios números como posibles opciones según indique el jugador. Para este juego se utilizarán dos TADs: celda: Clase que implementa una celda de un tablero. sudoku: Clase que se encarga del juego y conoce sus reglas. Ficheros a entregar: celda.h Especicación de la clase que corresponde a una celda de un tablero. Una celda contiene un valor y un conjunto de opciones de valores para esta celda. Una celda vacía se representa como una celda cuyo valor es cero. Una celda puede ser ja, es decir, su valor no puede ser modicado una vez que es introducido. El invariante de la clase celda especica que si una celda no está vacía entonces el conjunto de opciones debe estar vacío. sudoku.h Especicación de la clase encargada del juego. Un sudoku contiene un tablero de celdas de tamaño 9×9 y una pila de jugadas. El tablero puede tener tanto celdas jas como modicables. El invariante de la clase especi- ca que cada celda del tablero y cada elemento de la lista de opciones de la celda debe tener valores entre 0 y 9 en donde el cero representa una celda vacía. Además no puede haber en una misma la, columna o bloque dos valores iguales, ni en la celda ni en la lista de opciones de la misma. Un bloque se dene como una matriz de 3×3. Un sudoku contiene 9 bloques, como se puede ver en el siguiente esquema: 1
  • 2. _ _ _ 2 1 _ _ _ _ 9 _ _ _ 7 _ 5 _ _ _ 2 _ 5 3 _ _ 9 4 _ 9 _ _ _ _ _ 4 7 _ _ _ 1 _ 4 _ 5 _ _ _ _ _ _ _ _ _ _ _ _ _ _ 5 _ 3 1 _ 5 _ 7 _ _ _ _ _ _ 8 _ 1 _ _ _ _ 6 _ celda.cpp Implementación de la clase que controla una celda. sudoku.cpp Implementación de la clase encargada del juego. juego.cpp Contiene el main encargado de producir la interfaz entre el juego y el jugador. Este archivo debe contener el menu para jugar conteniendo, al menos, las siguientes opciones: 1 - Agregar opcion a una celda. 2 - Borrar opcion de una celda 3 - Fijar valor a una celda. 4 - Borrar valor de una celda. 5 - Verificar factible. 6 - Deshacer. 7 - Salir. Requisitos: El TDA celda debe contener, entre otros, al menos los sigu- ientes métodos: celda() Constructor por defecto de la clase que inicializa la celda vacía. bool fijar_valor(const unsigned int dato, const bool fija = false) Función que introduce un valor en una celda e indica si el mismo es o no jo. Si la celda ya es ja entonces no se puede modicar y por tanto la función devuelve false. En caso contrario devuelve true. void borrar_valor() Procedimiento que borra el contenido de una celda. unsigned int valor() const Función que devuelve el valor que aloja la celda. 2
  • 3. bool valida() const Función que devuelve true si la celda no está vacía y false en caso con- trario. bool nueva_opcion(const unsigned int dato) Función que guarda una nueva opción en la celda. Si el dato ya existe en el conjunto de posibles opciones, entonces devuelve false, sino devuelve true. bool borrar_opcion(const unsigned int dato) Función que borra una opción de la celda. Si el dato no existe en el conjunto de posibles opciones, entonces devuelve false, sino devuelve true. setunsigned int opciones() const Función que devuelve las opciones de la celda. Además se debe realizar la siguiente sobrecarga: ostream operator(ostream os, const celda c) Sobrecarga del operador para la clase celda. Este operador mostrará solamente el valor denitivo si es valido, sino deberá mostrar un _. No se mostrarrán las opciones de la celda. El TDA sudoku debe contener, entre otros, al menos los siguientes métodos: sudoku(const string file) Constructor de la clase que inicializa el juego con un tablero dado por archivo (ver Apéndice). bool fijar_valor(const unsigned int fila, const unsigned int columna, const unsigned int valor) Esta función ja el valor dado en la celda ubicada en la posición (- la,columna) del tablero en caso de que la jugada sea valida, en cuyo caso se devolverá true, o false en caso contrario. void borrar_valor(const unsigned int fila, const unsigned int columna) Procedimiento que elimina el valor de la celda ubicada en la posición (la,columna) del tablero. bool finalizado() const Función que devuelve true si el juego ha nalizado, es decir, todas las celdas contienen valores y éstos son válidos según las reglas del juego. listunsigned int opciones(const unsigned int fila, const unsigned int columna) const Función que devuelve las opciones que ha dejado el jugador guardadas la celda ubicada en la posición (la,columna) del tablero. bool nueva_opcion(const unsigned int fila, const unsigned int columna, const unsigned int valor) 3
  • 4. Función que guarda un nuevo valor en las opciones de la celda ubicada en la posición (la,columna) del tablero. Si el dato ya existe en las opciones de la celda, entonces devuelve false, sino devuelve true. bool borrar_opcion(const unsigned int fila, const unsigned int columna, const unsigned int valor) Función que borra el valor indicado de las opciones de la celda ubicada en la posición (la,columna) del tablero. Si el dato no existe en las opciones de la celda, entonces devuelve false, sino devuelve true. const celda valor(const unsigned int fila, const unsigned int columna) const Función que devuelve la celda ubicada en la posición (la,columna) del tablero. bool es_factible(const unsigned int fila, const unsigned int columna, const unsigned int valor) const Función que devuelve true si el valor dado puede ubicarse en la celda ubicada en la posición (la,columna) del tablero según las reglas del juego. bool undo() Función que deshace la ultima jugada. En el caso en que no haya más jugadas para deshacer la función devuelve false sino devuelve true. Además se debe realizar la siguiente sobrecarga: ostream operator(ostream os, const sudoku c) Sobrecarga del operador para la clase sudoku. Se muestran tanto el tablero como las opciones alojadaas en cada una de las celdas. Apéndice Generación de tableros aleatorios (http://davidbau.com/downloads/sudoku.py): Para generar tableros aleatorios se puede utilizar el programa sudoku.py. Tan solo ejecutando python sudoku.py genera un puzzle nuevo. El formato de los archivos que se pueden utilizar es como el siguiente: PUZZLE: _ _ _ 2 1 _ _ _ _ 9 _ _ _ 7 _ 5 _ _ _ 2 _ 5 3 _ _ 9 4 _ 9 _ _ _ _ _ 4 7 _ _ _ 1 _ 4 _ 5 _ _ _ _ _ _ _ _ _ _ _ _ _ _ 5 _ 3 1 _ 5 _ 7 _ _ _ _ _ _ 8 _ 1 _ _ _ _ 6 _ 4
  • 5. RATING: 1.5 Sudoku resuelto: PUZZLE: 4 5 8 2 1 9 6 7 3 9 1 3 4 7 6 5 8 2 7 2 6 5 3 8 1 9 4 1 9 5 8 6 3 2 4 7 3 7 2 1 9 4 8 5 6 6 8 4 7 2 5 9 3 1 2 4 9 6 5 7 3 1 8 5 6 7 3 8 1 4 2 9 8 3 1 9 4 2 7 6 5 RATING: 1.5 5