Sunteți pe pagina 1din 14

Universidad Mariano Glvez de Guatemala

Campus de Huehuetenango
Facultad de Ingeniera en Sistemas
Seccin A
Ing. Walter Galicia Garca

Proyecto mquina de Turing

Damason Alonso

0904-14-2505

Jos Luis Tomas Lpez

0904-14-20021

Juan Pablo Martnez

0904-13-3165

Ronaldo Mateo Garca

0904-14-20244

Huehuetenango 07/11/15

INTRODUCCIN
En las Unidades precedentes se han estudiado lo que se puede considerar las
mquinas abstractas que permiten solucionar ciertos tipos de algoritmos, los
algoritmos en los que no puede recordarse ms que una cantidad fija de
informacin y otros en los que la informacin desarrollada durante la ejecucin
del algoritmo puede recuperarse solo en concordancia con la regla lifo ltimos
en entrar primeros en salir, en esta unidad se describe una maquina abstracta,
llamada Mquina de Turing , que es aceptada de manera amplia como modelo
general de computacin, aunque las operaciones bsicas de esta mquina son
comparables en su sencillez a las de las mquinas estudiadas en las unidades
anteriores, las nuevas mquinas pueden realizar una amplia variedad de
operaciones de cmputo.

INDICE

1.
2.
3.
4.
5.

Pg.
Informe sobre la mquina de Turing.......................................4.
Cdigo de la mquina de Turing
....................................6.
Conclusiones ......................................................................13.
Conclusiones .........................................................................14
Egrafia.....................................................................................15

INFORME SOBRE LA MQUINA DE TURING


LA MAQUINA DE TURING (TM)
Manipula smbolos sobre una tira de cinta
de acuerdo a una tabla de reglas. A pesar
de su simplicidad, una mquina de Turing
puede ser adaptada para simular la lgica
de cualquier algoritmo de computador y es
particularmente til en la explicacin de las
funciones de un CPU dentro de un
computador.
El corazn de una mquina de Turing es una cinta infinitamente larga que se
divide en casillas en el que la informacin se puede escribir. En la prctica real,
por supuesto, no hay ningn dispositivo fsico puede tener un nmero infinito de
casillas. Pero en la teora de una Mquina de Turing, la cinta es infinita. La
informacin que se puede escribir en cada celda se limita a un solo smbolo, tal
como un 0 o un 1. Sin embargo, la informacin puede ser representada por los
valores combinados de casillas sucesivas.
La mquina de Turing contiene una cabeza de lectura-escritura que siempre se
coloca sobre una (y slo una) de las casillas de la cinta.
Esta cabeza de lectura-escritura puede leer el smbolo que est contenido en la
casilla. Tambin puede borrar el smbolo y, si se desea, escribir un nuevo
smbolo en su lugar. La casilla sobre la que se coloca la cabeza de lecturaescritura se conoce como la celda actual o la casilla cabeza.

FUNCIONAMIENTO
La mquina de Turing modela matemticamente a una mquina que opera
sobre una cinta. En esta cinta hay smbolos que la mquina puede leer y
escribir, uno a la vez. La operacin est completamente determinada por un
conjunto finito de instrucciones elementales como, por ejemplo: "en el estado
43, si el smbolo visto es 0, escribe un 1; Si el smbolo visto es 1, cambia al
estado 28 y muvete un espacio a la derecha; en el estado 28, si el smbolo
visto es 0, escribe un 1 y cambia al estado 6; etc".

La cinta est motorizado de manera que se puede mover hacia la izquierda o la


derecha debajo de la lectura y escritura cabeza de una casilla a la vez.
La mquina dispone de un estado, que est representado por un smbolo como
una letra del alfabeto.
Al igual que cualquier computadora, una mquina de Turing se puede
programar. Sin embargo, un programa para una mquina de Turing no se
parece remotamente un programa Java.
En su lugar, un programa de la mquina de Turing es simplemente un conjunto
de reglas que se evalan para determinar qu acciones debe tomar la
mquina. Cada regla identifica una accin a ser tomada cuando la celda actual
contiene un smbolo dado y el equipo est en un estado determinado. Por
ejemplo, una regla podra dictar lo que debe hacer si la celda actual contiene
un 1 y el estado de la mquina es "a".
Cada regla puede especificar cualquiera de tres acciones:

Borre la celda actual o escribir un nuevo valor a la celda.

Mover la cinta una celda hacia la izquierda o una celda a la derecha.

Cambie el estado de la mquina a un nuevo estado.

Por ejemplo, una regla puede especificar que si la celda actual contiene un 1 y
el estado de la mquina es "una," la Mquina de Turing debe escribir un 0 en la
celda actual, avanzar en la cinta una celda a la derecha, y cambiar el estado de
la mquina a "b".

DEFINICIONES BSICAS
La memoria en una Mquina de Turing tiene las siguientes caractersticas:
Es una coleccin de celdas que se extiende infinitamente en ambas
direcciones, es una cinta infinita.
Cada celda es capaz de almacenar un nico smbolo.
No existe una celda primera, ni una ltima y por lo tanto tiene capacidad
de almacenamiento infinito.
Los contenidos de las celdas pueden ser accedidos en cualquier orden.

Existe una cabeza de lectura/escritura que puede moverse sobre la


cinta y en cada movimiento leer o escribir un smbolo .

VARIABLES QUE USAREMOS EN EL PROGRAMA


public static String cadena, cadena2,aux;
public static BufferedReader reader;
public static int longitud;
public String complemento="";
public String arreglo[];
public int apuntador=1;
La variable apuntador simulara nuestra cabeza de lectura de la
mquina de Turing y la inicializaremos en 1
public int apuntador=1;
Lo primero que hace el programa es pedir el nmero binario y lo
guardara dentro de la variable cadena.
public static void main(String args[]){
System.out.println("Ingrese numero binario: ");
try{
reader = new BufferedReader(new InputStreamReader(System.in));
cadena = reader.readLine();
}catch(IOException e){
e.getMessage();
}
Complemento1 obj = new Complemento1();
}
}
Una vez que est guardado crea un objeto de a clase complemento
1.

El constructor de dicho objeto nos mostrara la cadena y llamara al


mtodo decodificar mandndole como parmetro la cadena.
//El constructor del objeto te muestra la cadena ingresada
public Complemento1(){
System.out.println("Cadena: "+cadena);
decodificar(cadena);
}
//Mtodo decodificar se encarga de crear el arreglo que
contendr la cadena
public void decodificar(String dec){
cadena2="#"+cadena+"#";
longitud = cadena2.length(); // Calculamos el tamao de
//la nueva cadena

arreglo = new String[longitud]; //Y creamos el arreglo del


//tamao de la longitud de
la //nueva cadena

for(int i=0;i<longitud;i++){
arreglo[i]=""+cadena2.charAt(i);
}
e0();
}
Este mtodo se encargara de agregarle el smbolo de inicio y fin
de nuestra cadena
Una vez que tenemos el arreglo le pasamos la nueva cadena y
llamamos al mtodo e0.

Este mtodo representa es estado 0 o el estado inicial de nuestra


mquina de Turing.
Por lo cual si el primer smbolo que lee nuestra maquina es un 0
lo cambiara por un 1 si se movera a la derecha y se cambiara al
estado 1.
//El metodo e0 representa al estado 0, el estado inicial
public void e0(){
aux= arreglo[apuntador];
if (aux.equals("0")){
arreglo[apuntador]="1";
moverDerecha();
e1();
}
else if (aux.equals("1")){
arreglo[apuntador]="0";
moverDerecha();
e1();
}
else if (aux.equals("#")){
arreglo[apuntador]="#";
moverIzquierda();
System.out.println("Cadena vacia");
}else{
rechazar(aux);
}
}
En el caso de que lea un 1 lo cambiara por cero se mueve a la
derecha y cambia el estado 1.
Si el primer smbolo que lee es un # significara que nuestra cadena
esta vaca por lo cual nos mostrara la leyenda cadena vaca y ah
terminara nuestro programa.

//El metodo e1 representa al estado 1


public void e1(){
aux= arreglo[apuntador];
if (aux.equals("0")){
arreglo[apuntador]="1";
moverDerecha();
e1();
}
else if (aux.equals("1")){
arreglo[apuntador]="0";
moverDerecha();
e1();
}
else if (aux.equals("#")){
arreglo[apuntador]="#";
moverIzquierda();
e2();
}else{
rechazar(aux);
}
}

En el caso de que no reciba un smbolo diferente a 1 0 #


significara que hemos ingresado un carcter no valido para esta
mquina de turing. Y nos mandara el mtodo rechazar y le pasara
como parmetro en dicho smbolo.
El mtodo e1 represa el estado 1 el cual se encargara de ir
cambiando los ceros y unos por sus respectivos complementos y
se mover a la derecha hasta llegar al final de nuestra cadena. El
cual si encuentra un 0 lo cambia por un 1 se mueve a la derecha y
permanece en su mismo estado
Si recibe un 1 lo cambia por 0 se mueve a la derecha y se queda en
el mismo estado.
En el caso de que encuentre el smbolo # significara que ha llegado
al final de nuestra cadena por lo cual deja el mismo smbolo se
mueve a la izquierda y nos pasamos al estado 2.

Este segundo estado 2 se encargara de mover nuestra cabeza de


lectura al inicio de nuestra cadena por lo cual solo se ira recorriendo
si encuentra un cero dejara un cero y se mover a la izquierda y se
quedara en el mismo estado
si recibe un 1 escribir un 1 se mueve a la izquierda y se queda en
el estado 2.
//El metodo e2 representa al estado 2
public void e2(){
aux= arreglo[apuntador];
if (aux.equals("0")){
arreglo[apuntador]="0";
moverIzquierda();
e2();
}
else if (aux.equals("1")){
arreglo[apuntador]="1";
moverIzquierda();
e2();
}
else if (aux.equals("#")){
arreglo[apuntador]="#";
moverDerecha();
e3();
}else{
rechazar(aux);
}
}
En el caso de que encuentre el smbolo # querr decir a llegado al
inicio de nuestra cadena por lo cual escribir el mismo # se mover
a la derecha y nos mandar a nuestro estado 3.

10

e3 representa el estado 3 o al estado de aceptacin de nuestra


mquina de Turing por lo cual cuando llegamos aqu dentro de la
variable complemento vamos a pasarle el contenido de nuestro
arreglo una vez que est dentro del complemento mostramos el
resultado
//El metodo e3 representa al estado 3, el estado de aceptacin
public void e3(){
for(int i=1;i<longitud-1;i++){
complemento=complemento+arreglo[i];
}
System.out.println("El complemento a 1 de: "+ cadena +"
es: "+ complemento);
}

//Mueve el puntero de la MT a la derecha


public void moverDerecha(){
apuntador++;
}
//Mueve el puntero de la MT a la izquierda
public void moverIzquierda(){
apuntador=apuntador-1;
}
//Si entra en este estado, significa que se encontra un caracter
no valido
public void rechazar(String noval){
System.out.println("Caracter no valido: "+noval);
}
Aqu estn los mtodos de mover derecha el cual solo ira
incrementado nuestra apuntador.
mover izquierda que le ira decrementando
El mtodo rechazar el cual es cuando encuentra un carcter no
valido y nos muestra dicho carcter.

11

Ahora mostraremos el funcionamiento de nuestro programa


Una vez compilado lo ejecutamos. En este primer ejemplo
ingresaremos 100010

Nos muestra la cadena que ingresamos. Y como resultado nos


arrojara la cadena y su complemento.
Ahora ingresaremos un carcter no valido1001h01

Nuestro programa detecto que el carcter h es un carcter no


aceptado por nuestra mquina de Turing.
Nos muestra nuestra cadena y nos dice que el carcter no valido es
h porque solo acepta 1 y 0.
Ahora un ejemplo donde no ingresamos ninguna cadena por lo cual
nos muestra cadena vaca.

12

CONCLUSIONES
Las mquinas de Turing encierran todo el poder de los procesos
computacionales, pues son capaces de simular cualquier proceso algortmico.
Tambin encontramos que si una mquina de Turing no puede resolver un
problema, entonces ninguna computadora podr hacerlo simplemente porque
no existe un algoritmo para obtener su solucin. En otras pala-bras, las
limitaciones que hemos detectado corresponden a los procesos
computacionales, no a la tecnologa.
Las mquinas de turing pueden ser simuladas por autmatas, los lenguajes
aceptados por estas mquinas son los lenguajes estructurados por frases.

13

RECOMENDACIONES
Es necesario conocer ms sobre la mquina de Turing y su
simulacin en JAVA.
El cdigo y cada una de las bibliotecas usadas en la
simulacin de la mquina de Turing deben de ser analizadas
con ms precisin.

14

S-ar putea să vă placă și