RECUBRIMIENTO CON TRIMINOS
Transcripción
RECUBRIMIENTO CON TRIMINOS
RECUBRIMIENTO CON TRIMINOS Podéis encontrar información sobre cómo hacer recubrimientos con triminos en laweb: http://www.dma.fi.upm.es/docencia/primerciclo/matrecreativa/juegos/poliominos/triminos/triminos.htm 1- Funcionamiento del programa principal (main): La clase trimino pondrá en marcha el programa dentro del método main, el cual debería tener la siguiente estructura. fun main Leer los parámetros recibidos si (–h) entonces mostrar_ayuda(); sino Comprobar que los parámetros pasados son válidos CoordenadaX>=0 y CoordenadaX<=dimensión CoordenadaY>=0 y CoordenadaY<=dimensión Comprobar que el fichero pasado no existe (si nos han pasado el parámetro correspodinetne) si (parametros_válidos y fichero_correcto) si (dimensión potencia de dos) new CSolucionador(traza,x,y,dimensión) sino Indicar que el problema no tiene solución. fsi fsi fsi ffun 2- Clase CSolucionador: La clase trimino por tanto, solo se encargará de la lectura de parámetros, interpretación de los mismos, y si todo es correcto usará la clase solucionador para resolver el problema. La estructura de la clase solucionador sería la siguiente: A continuación veremos el pseudocódigo de los métodos de esta clase. a. Constructor: fun CSolucionador (bolean t, int x, int y, file f) trazado=t; fichero = f; new matriz[dim]][dim] Inicializar_matriz(‘.’); Matriz[x-1][y-1]=’#’; ImprimirMatriz(inicial); indicePieza=1; DivideyVenceras(0,0,dim) ffun b. Función divide y venceras de cálculo de solución: fun DivideyVenceras(int origenX, int origenY, int dim) si (dim==2) solucion_trivial; //Rellenar las tres casillas vacias IndicePieza++; si (trazado) imprimirMatriz(traza); sino localizar_cuadrante_ocupado; rellenar_esquina_opuesta; si (trazado) imprimirMatriz(traza); DivideyVenceras(cuadrante_ocupado); DivideyVenceras(llamada2); DivideyVenceras(llamada3); DivideyVenceras(llamada4); fsi ffun Una de las cosas importantes que debemos considerar es como hacer las llamadas a la función recursiva, ya que según para que cuadrante lo queramos hacer (nor-oeste, nor-este, sur-oeste, sur-este) los orígenes que tenemos que usar son distintos: Nor-oeste: DyV(origenX, origenY, (dim/2)) Nor-este: DyV(origenX, origenY+(dim/2), (dim/2)) Sur-oeste: DyV(origenX+(dim/2), origenY, (dim/2)) Sur-este: DyV(origenX+(dim/2), origenY+(dim/2), (dim/2)) c. Imprimir matriz: Esta función imprimirá la matriz. En caso de que se haya pasado un fichero como parámetro lo que hará será escribir dicha matriz dentro del fichero. Si no se ha pasado dicho fichero el resultado se mostrará por la salida estándar (pantalla). d. Obtener pieza: A esta función le pasaremos el índice de la próxima pieza a colocar y nos devolverá el carácter que le corresponde. Su código será muy sencillo: fun char obtenerPieza(int índice) char[] piezasPosibles={‘1’,’2’,’3’,……., ‘Y’,’Z’); return piezasPosibles[índice%piezasPosibles.length); ffun