miércoles, 9 de abril de 2008

MT's de la multiplicación, división y cuadrado.

MULTIPLICACIÓN

f
0
1
B
$
X
q0(q0,0,R)(q0,1,R)(q1,$,L)


q1(q1,0,L)(q1,1,L)(q2,B,R)

q2(q3,B,R)(q7,B,R)


q3(q3,0,R)(q4,1,R)


q4(q5,X,R)(q1,1,L)
(q4,$,L)(q4,0,L)
q5(q5,0,R)(q2,1,L)(q6,0,L)(q5,$,R)
q6(q6,0,L)

(q6,$,L)(q4,X,R)
q7(q7,B,R)

(q8,B,R)
q8






DIVISIÓN

f
0
1
Y
$
B
q0(q0,0,R)(q0,1,R)(q0,Y,R)(q4,$,L)(q1,B,L)
q1(q2,0,R)



q2(q2,0,L)(q2,1,L)(q2,Y,L)
(q3,B,R)
q3(q0,B,R)(q8,B,R)


q4(q4,0,L)(q5,1,R)(q4,Y,R)

q5(q2,Y,L)
(q5,Y,R)(q6,$,R)
q6(q6,0,R)


(q7,0,L)
q7(q7,0,L)(q2,1,L)(q7,0,L)(q7,$,L)
q8(q8,0,R)
(q8,Y,R)(q9,1,L)
q9(q10,0,L)
(q9,0,L)
(q14,B,R)
q10(q10,0,L)
(q11,0,R)
(q13,B,R)
q11(q11,0,R)(q12,1,L)(q11,Y,L)

q12(q10,Y,L)
(q12,Y,L)

q13(q13,B,R)(q14,1,R)(q13,0,R)
(q14,B,L)
q14





N^2

SUBRUTINA

Subrutina que añade un cero automaticamente al final y luego por cada cero que hay antes de la X añade 2 ceros al final.

f
0
1
Y
B
$
j0(j0,0,R)

(j1,0,L)(j0,$,R)
j1(j1,0,L)(j1,X,L)(j2,0,R)(j2,B,R)(j1,$,L)
j2(j3,Y,R)(q5,0,R)


j3(j3,0,R)(j3,X,R)
(j4,0,R)(j3,$,R)
j4


(j1,0,L)


PRINCIPAL

f
0
X
B
$
q0(q0,0,R)
(q1,$,L)
q1(q1,0,L)
(q2,B,R)
q2(q3,X,R)


q3(q3,0,R)
(q4,0,L)(q3,$,R)
q4(q4,0,L)(q5,0,R)
(q4,$,L)
q5(j0,X,R)

(q6,B,L)
q6(q6,B,L)
(q7,B,R)
q7




5 comentarios:

Espinete dijo...

La MT multiplicación esta mal diseñada. Después de borrar un cero del primer argumento escribe al final de la cadena tantos ceros como tenga el segundo argumento. Pero cuando escribe el último cero entra en bucle infinito escribiendo ceros al final de la cadena. Cuando ha escrito el último cero, en el estado q6, vuelve hacía atrás saltandose 0 y $ hasta que encuentra una X entonces pasa a q4 y mueve el cabezal a la derecha encuentra $ permanece en q4 y lee una X pasa a q5 yendo a la derecha hasta que encuentra un B escribe un 0 y pasa a q6.

Espinete dijo...

La MT división tampoco funciona. El primer error que se detecta es cuando a en el estado q3 la máquina se parara. La máquina hace lo siguiente. En q0 recorre la cadena hasta el final, cuando encuentra un 0 pasa a q1 reescribe el cero y pasa el cabezal a la izquierda. En q1 si encuentra un cero pasa a q2, reescribe el cero y el cabezal a la derecha. En q2 encontrando un B pasa a q3, reescribe el B y cabezal a la derecha. Estara en q3 y el cabezal en un B. No hay transisición para este estado y la máquina se para.

Espinete dijo...

La MT x^2 no funciona. A la subrutina se le pasa una cadena con una X. En un determinado momento el cabezal estara leyendo ese simbolo pero la subrutina no tiene transición asociada a X. Lo que hace que la máquina pare.

Espinete dijo...
Este comentario ha sido eliminado por el autor.
Espinete dijo...
Este comentario ha sido eliminado por el autor.