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

Documentos relacionados