Está en la página 1de 12

INGENIERÍA EN SISTEMAS COMPUTACIONALES

LENGUAJES Y AUTÓMATAS 1

PROFESOR:

REPORTE: EJERCICIOS DE MÁQUINAS DE TURING

ALUMNO

AULA: HORA:

FECHA DE ENTREGA:
1. Diseñar una Máquina de Turing (MT) que calcule el complemento a 1 de un
número binario (sustituye los 0 por 1 y viceversa).
Se tiene que recorrer la cadena o cinta sustituyendo por un 0 cuando se halle un 1
y sustituyendo por un 1 cuando se halle un 0.
Probando la siguiente cadena:

Salida:

MT del ejercicio 1

2. Diseñar una MT que obtenga el sucesor de un número en codificación


unaria. Considerar en la codificación unaria que el 0 se representa por la
cadena vacía, el 1 por 1, el 2 por 11, etc.
Este ejercicio pide que si el usuario ingresa una cadena (que contará siempre de
1´s y nada más) la salida sea el sucesor unario de esa cadena. Si ingresamos la
cadena 11 nos tendrá que dar como resultado la salida 111; si ingresamos la cadena
1111 nos dará como resultado 11111; etc.
Recorreremos la cinta y al momento de encontrar un espacio en blanco colocaremos
un uno y habremos terminado.

MT del ejercicio 2
Probando la siguiente cadena:

Resultado:

3. Diseñar una Máquina de Turing que obtenga el predecesor de un número


en codificación unaria. Considerar la codificación unaria del 0 igual que en el
ejercicio 2.
Este ejercicio pide que si el usuario ingresa una cadena (que contará siempre de
1´s y nada más) la salida sea el antecesor unario de esa cadena. Si ingresamos la
cadena 11 nos tendrá que dar como resultado la salida 1; si ingresamos la cadena
1111 nos dará como resultado 111; etc.
Recorreremos la cinta y al momento de encontrar un espacio en blanco colocaremos
un espacio en blanco, retrocederemos y al encontrar un uno lo reemplazaremos por
un espacio en blanco y habremos terminado.
Probando la siguiente cadena:

MT del ejercicio 3

Resultado:
4. Diseñar una Máquina de Turing que calcule la paridad de un número binario.
Es decir, si el número de 1’s de la cadena es par, se añade un 0 al final, y si es
impar, se añade un 1.
El usuario podrá meter una cadena que contenga 0´s y 1´s y se tendrá que colocar
al final de la cinta un 1 si la cantidad de 1’s ingresada es impar (si hay un 1, tres 1’s,
cinco 1’s, etc.) o un 0 si la cantidad de 1´s en la cinta es par (cero 1’s, dos 1’s, cuatro
1’s, etc.)
En el estado inicial de la MT tenemos que comprobar si hay un cero al inicio (si lo
hay reescribimos el 0), nos vamos al estado uno si hay un 1 (reescribimos el 1) y en
ese estado volvemos a ver si hay un cero (y lo reescribimos) si sigue un espacio en
blanco en la cinta significa que los unos son impares y nos vamos al estado dos y
escribimos un 1; de lo contrario nos vamos al estado inicial y repetimos el proceso.
Si nos topamos con un uno después de haber pasado por el estado uno y volvemos
al estado inicial significa que es el segundo uno (o cuarto o sexto u octavo, etc.) y
por ello al toparnos con un espacio en blanco lo sustituimos por un 0 (hay un número
par de 1’s).

MT del ejercicio 4

Probando la siguiente cadena (número impar de 1’s):

Salida:

Puso un 1 al
final (impar)
Probando la siguiente cadena (número par de 1’s):
Salida:

Puso un 0 al
final (par)

5. Diseñar una Máquina de Turing que sea un contador unario de caracteres


del lenguaje con alfabeto Σ = {a,b,c}. Es decir, se deben devolver tantos 1’s
como caracteres haya en la palabra de entrada. Considerar la codificación
unaria del 0 igual que en el ejercicio 2.
El usuario podrá ingresar una cinta de tantas a, b y c como desee, estos caracteres
serán reemplazados por unos y será todo. Cuando aparezca un espacio en blanco
se pasará al estado final.

MT del ejercicio 5

Probando la siguiente cadena (8 caracteres, la MT deberá devolver ocho 1’s):


Salida:

Ocho 1’s

6. Diseñar una Máquina de Turing que haga una copia de una cadena de
símbolos {A,B,C}. Por ejemplo, para la entrada “bAABCAb” devuelve en la
cinta “bAABCAAABCAb”, donde ‘b’ representa el blanco.
Sin duda la MT más difícil de estos problemas, consistirá en meter una cadena y la
salida de la MT será la misma cadena de entrada más esa misma cadena. Para
empezar, evaluaremos todos los caracteres de la cadena (y serán reemplazados
por los mismos caracteres) hasta encontrar un espacio en blanco, este será
reemplazado por una “Y” que representa el final de la cadena. Ahora nos
moveremos hacia la izquierda evaluando cada carácter (siendo reemplazados por
ellos mismos) hasta encontrar un espacio en blanco (y nos moveremos a la derecha,
es decir, el inicio de la cadena), luego nos moveremos al siguiente carácter de la
cadena (2do carácter). Ahora empezaremos con la “copia” de la cadena original.
Dependiendo si hay una A, B o C la MT seguirá distintos caminos y cuando halla
recorrido todos los caracteres y se tope con la “Y” se irá a otro camino. En fin, para
copiar cada carácter se realiza el mismo procedimiento, solo cambia el carácter
evaluado; en el siguiente algoritmo el carácter evaluado (que puede ser A, B o C) lo
llamo “E”:
1. Sustituir E por X y movernos a la derecha
2. Sustituir todos los valores por ellos mismos (incluyendo Y) moviéndonos a la
derecha
3. Si se halla un espacio en blanco lo sustituiremos por E y nos moveremos a
la izquierda
4. Sustituir todos los valores por si mismos moviéndonos a la izquierda hasta
hallar X
5. Sustituir X por E y movernos a la derecha (siguiente carácter).
6. Ir al paso 1
Pudimos observar que el algoritmo es simple, pero difícil de pensar y armar.
Si al momento de volver (o llegar desde un principio) al paso 1 (inicio de la “copia”)
nos topamos con una “Y” entonces significa que hemos llegado al final de la cadena
original, nos moveremos a la izquierda (el carácter anterior a la “Y”) y seguiremos
otro algoritmo:
1. Recorrer la cadena hacia la izquierda y sustituir los valores por si mismos (A,
B o C).
2. Si se halla un espacio en blanco (el espacio anterior al primer carácter de la
cadena original) nos moveremos a la derecha y nos situaremos en el primer
carácter de la cadena.
A partir de ahora todo es más simple; si estamos en una “A” significa que la letra “Y”
deberá ser reemplazada por el carácter “A”; si estamos en una B significa que la
letra “Y” será reemplazada por una B; lo mismo pasa con el carácter C. Recordemos
que empezamos a copiar desde el segundo carácter de la cadena original.
Entonces, dependiendo del camino que tome nos movermos hacia la derecha
reemplazando cada carácter por si mismo hasta hallar la “Y” que será sustituida por
su respectivo inicio (A, B o C). Habremos terminado con la copia.
MT del ejercicio 6

Probando la siguiente cadena:


Salida:

7. Diseñar una Máquina de Turing que tome como entrada una cadena con M
1’s y N A’s (M<=N), y cambia las M primeras A’s por B’s. Por ejemplo, para la
entrada “b11AAAAAb” devuelve en la cinta “b11BBAAAb”, donde ‘b’
representa la celda de la cinta vacía.
Ingresamos un número M de 1’s seguidos de un número N de A’s. Si ingresamos,
por ejemplo, 111 (tres 1’s) seguido de AAAA (cuatro A’s), entonces la salida debe
ser 111BBBA puesto que al tener tres 1’s reemplazamos las primeras tres A’s con
B.
El algoritmo puede ser el siguiente:
1. Si se halla una B ir al paso 5. Ir hacia la derecha y sustituir por X si se halla
un 1 e ir a la derecha
2. Sustituir los 1’s por 1’s y las B’s por B’s avanzando hacia la derecha si
encontramos una A la sustituiremos por B y nos moveremos a la izquierda
3. Sustituiremos los 1’s y las B’s por ellos mismos, si encontramos una X
significa que llegamos al inicio de la cadena original; sustituiremos esa X por
el 1 y nos moveremos hacia la derecha.
4. Ir al paso 1
5. Hemos llegado a la primera B de la cadena de salida por lo tanto hemos
terminado, colocamos una B y permanecemos (Stay= S).

MT del ejercicio 7

Probando la siguiente cadena (cinco 1’s y diez A’s):


Salida:

Cinco 1’s , cinco B’s y cinco A’s


8. Diseñar una Máquina de Turing que tome como entrada dos palabras
formadas por los símbolos del alfabeto {0,1,2}, separadas por el símbolo {#},
y comprueba si son iguales. Por ejemplo, para la entrada b2101#2101b
devuelve que sí son guales, donde ‘b’ representa la celda de la cinta vacía.

Ingresaremos una cadena (separada por #) y veremos si el lado izquierdo del # es


igual al lado derecho del #. Preferentemente meteremos cadenas del mismo tamaño
tanto del lado izquierdo del # como del lado derecho.
Dependiendo si el inicio de la cadena es 0, 1 o 2 dependerá hacia donde se desplace
la MT, pero el algoritmo para cada caso es el mismo; sustituiré el carácter (0, 1 o 2
por E):
1. Sustituir E por X e ir hacia la derecha
2. Avanzando hacia la derecha sustituir 0, 1 y 2 por ellos mismos, si
encontramos el # colocamos el mismo # y nos movemos a la derecha
3. Si hallamos una Y la sobrescribimos y nos movemos a la derecha.
4. Si hallamos una E lo cambiamos por una “Y” y nos movemos a la izquierda
5. Moviéndonos hacia la izquierda sustituimos 0, 1, 2, Y y # por ellos mismos,
si encontramos la X sustituir por E y desplazarnos hacia la derecha
6. Volver al paso 1
Ahora si hallamos un # significa que hemos analizado toda la cadena y salimos.
Resalto que si los caracteres a los lados de # son iguales veremos tantas X como
Y a ambos lados, es decir, si ingreso la cadena 2101#2101 nos saldrá XXXX#YYYY
diciéndonos que las cadenas son iguales, si las cadenas no son iguales se generará
un error .

MT del ejercicio 8
Probando la siguiente cadena (igual):
Salida:

Probando la siguiente cadena (no igual):


Resultado

Vemos que da error, solo el


primer carácter del lado izquierdo
es igual al derecho

9. Diseñar una Máquina de Turing que obtenga el sucesor de un número


binario.
La entrada constará de un número binario (ceros y unos) y la salida será el sucesor
de ese número, por ejemplo, si ingresamos 1010 (diez decimal) la salida debe ser
1011 (once decimal).
Podemos notar que el sucesor de un número binario que acaba en cero es ese
mismo número, pero con un uno reemplazando a su último cero de la derecha; así
el sucesor de 1010 es 1011, el sucesor de 1000 es 1001, el sucesor de 110010 es
110011, etc.
Ahora, el sucesor de un número binario que acaba en uno no es tan sencillo;
reemplazaremos ese uno final por un cero y nos moveremos hacia la izquierda
sustituyendo los 1’s por 0’s hasta que hallemos un cero. Si hallamos un cero lo
reemplazaremos por uno (seguimos recorriendo la cinta reemplazando los valores
por si mismos hasta hallar el espacio en blanco) y hemos acabado, si hallamos un
espacio en blanco lo reemplazaremos por un uno y habremos terminado.
MT del ejercicio 9

Probando la siguiente cadena (número 11 decimal) (termina en uno):


Salida:

12 decimal

Probando la siguiente cadena (número 12 decimal) (terminada en cero):


Salida:

13 decimal

10. Diseñar una Máquina de Turing que obtenga el antecesor de un número


binario
La entrada constará de un número binario (ceros y unos) y la salida será el
antecesor de ese número, por ejemplo, si ingresamos 1010 (diez decimal) la salida
debe ser 1001 (nueve decimal).
Al contrario que en la MT anterior, si tenemos un número que termina en 1
reemplazaremos ese uno por un cero, reemplazaremos hacia la izquierda los
caracteres por ellos mismos y habremos terminado al encontrar el espacio en
blanco.
Si hay un cero al final de la cinta lo reemplazamos por 1 recorremos la cinta de
izquierda a derecha reemplazando los caracteres por si mismos hasta encontrar
uno que será reemplazado por un cero; habremos terminado con el algoritmo.

MT del ejercicio 10

Probando la siguiente cadena (termina en 1) (51 decimal):

Salida:

50 decimal

Probando la siguiente cadena (termina en 0) (50 decimal):


Salida:

49 decimal