Pascal/Turbo Pascal - SUDOKU

 
Vista:

SUDOKU

Publicado por Lp1 (5 intervenciones) el 17/03/2010 16:33:09
Hola
Necesito urgentemente la solución a este enunciado ya que llevo 2 semanas intentandolo y no consigo que compile ni funcione....y es para la universidad.
Muchas gracias.
____________________________________

Su resolución requiere paciencia y ciertas dotes lógicas, y tradicionalmente consiste en rellenar un tablero de 99 celdas, es decir 81 casillas, dividido en regiones o cajas de 33 con las cifras del 1 al 9 partiendo de algunos números ya dispuestos



El objetivo de esta práctica es desarrollar una aplicación que nos permita jugar al Sudoku.
En todo momento la aplicación debe mostrar el tablero actualizado y un menú con las siguientes opciones:
1. Ver posibles valores de una casilla
2. Colocar valor en una casilla
3. Borrar valor de una casilla
4. Detectar valores incorrectos
5. Reiniciar el tablero
6. Autocompletar celdas simples*
0. Salir
Todas las opciones que requieran acciones sobre una casilla solicitarán ésta (es decir, la fila y la columna correspondientes) al usuario a través de teclado.
La opción 1 (Ver posibles valores de una casilla) sirve para visualizar por pantalla todos los valores válidos con los que podría rellenarse la casilla vacía indicada.
La opción 2 (Colocar valor en una casilla) permite colocar el valor proporcionado por el usuario en la casilla vacía que se haya indicado.
La opción 3 (Borrar valor de una casilla) vacía la casilla indicada. Evidentemente sólo se pueden vaciar casillas rellenas que no hayan sido dadas como valores de partida en el juego.
Mediante la opción 4 (Detectar valores incorrectos) el usuario solicita al programa que inspeccione el tablero, lo contraste con la solución y localice todos los valores colocados que sean incorrectos. Los errores deben reflejarse sobre el propio tablero de juego.
La opción 5 (Reiniciar el tablero) permite reanudar el juego con el tablero de partida.
La opción 6 (Autocompletar celdas simples) hace que la aplicación rellene automáticamente aquellas casillas vacías que tienen un único valor candidato y que, por tanto, puede considerarse definitivo para ese estado del tablero.
La opción 0 (Salir) permite al usuario finalizar la ejecución de la aplicación en cualquier momento.

La ejecución de la aplicación finaliza bajo demanda del usuario y también automáticamente cuando se ha completado el relleno del tablero. En este segundo caso la aplicación antes de finalizar informará al usuario de los errores cometidos (marcándolos sobre el tablero) o del éxito.

Algunos detalles de implementación (se ampliarán en clase)
 Aunque nos limitemos a la versión tradicional de tamaño 99, la aplicación debe ser fácilmente modificable a tableros de otro tamaño.
 Todas las entradas del usuario se deben filtrar, no admitiendo el avance de la ejecución hasta que sean válidas.
 En la visualización del tablero deben diferenciarse mediante colores los números que constituyen el tablero de partida (en azul) de los que se colocan manual o automáticamente (en verde). De igual forma, las casillas que, al solicitar la opción 4 del menú o al final de la ejecución, se detecte que contienen un valor no válido serán distinguidas mediante el color rojo.
 Tanto el tablero de partida como la solución serán cargados al principio de la ejecución de la aplicación desde disco. Para ello puedes ayudarte del código que aparece en el anexo.
La información acerca del tablero de partida y la solución se encontrarán en sendos ficheros de texto con tantas líneas como casillas (rellenas en el caso del tablero de partida) y cada línea conteniendo 3 valores enteros separados por blancos, el primero representando la fila de la casilla, el segundo la columna y el último el valor.
 El reinicio del tablero (caso de ser solicitado) debe realizarse sin nuevos accesos a disco.
 Se deben usar conjuntos (tipo SET) para representar los números candidatos de filas y columnas.

______________(ANEXO)______________________________________

Para realizar la carga del tablero de partida y la solución desde disco puedes utilizar y completar el siguiente código:


var

f, c, v: integer;
(* f = fila de la casilla; c = columna de la casilla; v = valor *)
nombreFichero: string;
(* cadena para guardar el nombre y la ruta del fichero *)
fich: text;
(* fichero lógico *)

begin

(* ... código adicional, si es necesario ... *)

repeat
write('Introduzca el nombre del fichero: ');
readln(nombreFichero);

assign(fich, nombreFichero);

{$I-}
reset(fich);
{$I+}

until IOResult = 0;

while not eof(fich) do
begin
readln(fich, f, c, v);
(* ... código en el que empleas la fila, la columna y el valor
leídos para rellenar la casilla que corresponda... *)
end;

close(fich)

(* ... código adicional, si es necesario ... *)

end;

___________(a parte de esto, nos dan 3 ficheros, con solucion y 2 tableros, en un txt con 3 columnas de numeros)________________
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:SUDOKU

Publicado por Ruy (4 intervenciones) el 20/03/2010 01:34:02
De La complu no? mira que es facil pillar a la gente cuando buscas un poco xD
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:SUDOKU

Publicado por Alfredo Gonzalez (1 intervención) el 13/04/2010 20:34:28
Cuando tenias q entregarla hoy o mañn?
con Borja o con Pablo!
lo llevas crudo pero si quieres te la puedo pasar,
que yo ya la he conseguido terminar ;)
llamame a este numero y quedamos en la facultad
91 394 7638
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:SUDOKU

Publicado por dzagbro (1 intervención) el 20/03/2011 00:05:32
Hola!

¿Alguno de vosotros conserva aun la solucion de esta práctica? :0)

Gracias!!!!!!!!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar