Javier Garcés Niño
Manuel Alberto Bolós Doñate
José Simó Albiol
MT para sacar divisores (MT sin modificaciones):
Dados un enteros n, obtener su lista de divisores.
ENTRADA: ...B0000000000B... (0n)
SALIDA: ...B0100100000B... (0i110i210i31... donde i1, i2, i3,... son los divisores de n)
Nota: a la hora de colgar el diseño de la MT normal al blog descubrí un error en el momento que guardaba el valor en la lista de divisores y posteriormente el incremento en un "0" al inicio de la cinta para hacer la comprobación con el siguiente posible divisor. Dicho error no comprobaba si el nuevo divisor a analizar era de mayor tamaño que el número n inicial, provocando un bucle infinito... :-S Bastó con incluir nuevos estados al final de la tabla que comprobaran si el nuevo divisor era de mayor tamaño que n.
0 | 1 | $ | B | X | |
q0 | (q0,0,R) | (q1,$,L) | |||
q1 | (q1,0,L) | (q2,$,L) | |||
q2 | (q3,0,L) | ||||
q3 | (q4,x,R) | (q3,B,R) | |||
q4 | (q4,0,R) | (q5,$,R) | |||
q5 | (q6,X,L) | (q5,X,R) | |||
q6 | (q6,0,L) | (q7,$,L) | (q6,X,L) | ||
q7 | (q12,0,R) | (q8,x,R) | |||
q8 | (q9,$,R) | ||||
q9 | (q10,0,L) | (q17,$,R) | (q9,X,R) | ||
q10 | (q11,$,L) | (q10,X,L) | |||
q11 | (q3,B,R) | (q11,0,L) | |||
q12 | (q13,$,R) | ||||
q13 | (q15,0,L) | (q14,$,L) | (q13,X,R) | ||
q14 | (q14,0,L) | (q14,$,L) | (q3,0,L) | (q14,0,L) | |
q15 | (q16,$,L) | (q15,X,L) | |||
q16 | (q16,0,L) | (q3,x,R) | |||
q17 | (q17,0,R) | (q17,1,R) | (q18,0,L) | ||
q18 | (q18,0,L) | (q18,1,L) | (q19,$,L) | ||
q19 | (q20,$,L) | (q19,X,L) | |||
q20 | (q20,0,L) | (q21,0,L) | |||
q21 | (q25,0,R) | (q27,X,R) | |||
q22 | (q22,0,R) | (q22,1,R) | (q22,$,R) | (q18,0,L) | (q22,X,R) |
q23 | (q23,0,R) | (q23,1,R) | (q23,$,R) | (q24,1,L) | (q23,0,R) |
q24 | (q24,0,L) | (q24,1,L) | (q24,$,L) | (q3,B,R) | |
q25 | (q25,0,R) | (q26,$,L) | |||
q26 | (q27,X,R) | (q23,B,R) | (q26,X,L) | ||
q27 | (q28,$,R) | (q27,X,R) | |||
q28 | (q28,0,R) | (q31,B,L) | (q29,0,L) | ||
q29 | (q29,0,L) | (q26,$,L) | |||
q30 | (q30,X,L) | ||||
q31 | (q31,B,L) | (q31,B,L) | (q32,B,R) | (q31,B,L) | |
q32 |
MT para sacar divisores (MT multicabezal):
Nota: entrada y salida son iguales que con la MT normal sin modificaciones.
Descripción:
Para realizar la MT multicabezal del problema hemos usado 3 cabezales de L/E:
- 1 para trabajar con los "posibles" divisores durante el proceso.
- 1 para trabajar con el número de entrada n.
- 1 para escribir los divisores en la lista ubicada a la derecha del segundo símbolo "$", separados por un 1 cada divisor.
Nota: a pesar de que Jose realizó unas últimas trazas esta mañana con distintos casos no se ha comprobado que falle el modelo multicabezal mostrado a continuación, así que finalmente se ha colgado el modelo... (y crucemos los dedos de que no hubiera un fallo muy rebuscado aún sin detectar :-P )
f(q0,0,0,0) = (q1,{0,L},{0.Z},{0,R})
f(q1,B,0,0) = (q2,{$,L},{0,Z},{0,R})
f(q2,B,0,0) = (q3,{0,Z},{0,Z},{0,R})
f(q3,0,0,0) = (q3,{0,Z},{0,Z},{0,R})
f(q3,0,0,B) = (q4,{0,Z},{0,Z},{$,R})
f(q4,0,0,B) = (q4,{X,R},{X,R},{B,Z})
f(q4,$,0,B) = (q5,{$,L},{0,Z},{B,Z})
f(q5,X,0,B) = (q5,{0,L},{0,Z},{B,Z})
f(q5,B,0,B) = (q4,{B,R},{0,Z},{0,Z})
f(q4,0,$,B) = (q5,{0,L},{0,L},{B,Z})
f(q5,X,X,B) = (q5,{0,L},{0,L},{B,Z})
f(q5,B,X,B) = (q6,{0,R},{0,L},{B,Z})
f(q6,0,X,B) = (q6,{0,Z},{0,L},{B,Z})
f(q6,0,$,B) = (q4,{0,Z},{$,R},{B,Z})
f(q4,$,$,B) = (q7,{$,L},{$,L},{B,Z})
f(q7,X,X,B) = (q7,{Q,L},{0,L},{0,R})
f(q7,B,X,B) = (q8,{0,Z},{0,L},{1,R})
f(q8,0,$,B) = (q4,{0,Z},{$,R},{B,Z})
f(q7,B,$,B) = (q9,{B,R},{B,R},{B,Z})
f(q9,0,0,B) = (q9,{B,R},{B,R},{B,Z})
f(q9,B,$,B) = (q10,{B,Z},{B,Z},{B,Z})
f(q10,B,B,B) = ESTADO FINAL
No hay comentarios:
Publicar un comentario