miércoles, 13 de febrero de 2008

Maquina de turing

Bueno, la maquina de turing es un algoritmo para resolver "algoritmos", realizado por turing... aunque explicarlo es complejo, mejor busquenlo en wikipedia...
Aqui estan dos ejemplos programados en c++.

EJEMPLO 1

#include
main()
{
char cinta [13]={NULL};
int terminar = 0;
int ubicacion=0;
int estado=0;
int x;
FILE *archivo;
archivo=fopen("archivo.txt","a");
printf(" Programa que imita la maquina de turing");
printf("\n ingrese los valores de la cinta... ");
fprintf(archivo,"Programa que imita la maquina de turing");
scanf("%s", cinta);
fprintf(archivo,"\n El valor ingresado fue... %s",cinta);
printf(" %i",estado);
printf("\n %s \n", cinta);
getchar();
fprintf(archivo,"\n %i", estado);
fprintf(archivo,"\n %s \n", cinta);
do
{
if (cinta[ubicacion]==NULL)
{
terminar=1;
}
else
if (estado==0)
{
if (cinta[ubicacion]=='0')
{
cinta[ubicacion]='0';
ubicacion++;
estado=7;
}
else
if (cinta[ubicacion]=='1')
{
cinta[ubicacion]='0';
ubicacion++;
estado=1;
}
}
else
if (estado==1)
{
if (cinta[ubicacion]=='0')
{
cinta[ubicacion]='0';
++ubicacion;
estado=2;
}
else
if (cinta[ubicacion]=='1')
{
cinta[ubicacion]='1';
++ubicacion;
estado=1;
}
}
else
if (estado==2)
{
if (cinta[ubicacion]=='0')
{
cinta[ubicacion]='0';
++ubicacion;
estado=3;
}
else
if (cinta[ubicacion]=='1')
{
cinta[ubicacion]='1';
++ubicacion;
estado=2;
}
}
else
if (estado==3)
{
if (cinta[ubicacion]=='0')
{
cinta[ubicacion]='1';
ubicacion--;
estado=4;
}
else
if (cinta[ubicacion]=='1')
{
cinta[ubicacion]='1';
++ubicacion;
estado=3;
}
}
else
if (estado==4)
{
if (cinta[ubicacion]=='0')
{
cinta[ubicacion]='0';
ubicacion--;
estado=5;
}
else
if (cinta[ubicacion]=='1')
{
cinta[ubicacion]='1';
ubicacion--;
estado=4;
}
}
else
if (estado==5)
{
if (cinta[ubicacion]=='0')
{
cinta[ubicacion]='0';
ubicacion--;
estado=6;
}
else
if (cinta[ubicacion]=='1')
{
cinta[ubicacion]='1';
ubicacion--;
estado=5;
}
}
else
if (estado==6)
{
if (cinta[ubicacion]=='0')
{
cinta[ubicacion]='1';
++ubicacion;
estado=0;
}
else
if (cinta[ubicacion]=='1')
{
cinta[ubicacion]='1';
ubicacion--;
estado=6;
}
}
else
if (estado==7)
{
if (cinta[ubicacion]=='0')
{
cinta[ubicacion]='0';
++ubicacion;
estado=12;
}
else
if (cinta[ubicacion]=='1')
{
cinta[ubicacion]='0';
++ubicacion;
estado=8;
}
}
else
if (estado==8)
{
if (cinta[ubicacion]=='0')
{
cinta[ubicacion]='0';
++ubicacion;
estado=9;
}
else
if (cinta[ubicacion]=='1')
{
cinta[ubicacion]='1';
++ubicacion;
estado=8;
}
}
else
if (estado==9)
{
if (cinta[ubicacion]=='0')
{
cinta[ubicacion]='1';
ubicacion--;
estado=10;
}
else
if (cinta[ubicacion]=='1')
{
cinta[ubicacion]='1';
++ubicacion;
estado=9;
}
}
else
if (estado==10)
{
if (cinta[ubicacion]=='0')
{
cinta[ubicacion]='0';
ubicacion--;
estado=11;
}
else
if (cinta[ubicacion]=='1')
{
cinta[ubicacion]='1';
ubicacion--;
estado=10;
}
}
else
if (estado==11)
{
if (cinta[ubicacion]=='0')
{
cinta[ubicacion]='1';
++ubicacion;
estado=7;
}
else
if (cinta[ubicacion]=='1')
{
cinta[ubicacion]='1';
ubicacion--;
estado=11;
}
}
else
{
terminar=1;
}
printf(" ");
fprintf(archivo," ");
for(x=0;x {
printf(" ");
fprintf(archivo," ");
}
printf("%i",estado);
printf("\n %s \n", cinta);
fprintf(archivo,"%i",estado);
fprintf(archivo,"\n %s \n", cinta);
getchar();
}
while (terminar!=1);
printf("\n El resultado es: %s ", cinta);
fprintf(archivo,"\n El resultado es: %s ", cinta);
getchar();
getchar();
fclose (archivo);
return 0;
}

EJEMPLO2 SUMA DE 1´S

#include
main()
{
char cinta1 [11]={NULL};
char cinta [12]={NULL};
int terminar = 0;
int ubicacion=1;
int estado=0;
int x,a;
FILE *archivo;
archivo=fopen("archivo.txt","a");
printf(" Programa que imita la maquina de turing 2");
printf("\n ingrese los valores de la cinta... ");
fprintf(archivo,"Programa que imita la maquina de turing");
scanf("%s", cinta1);
fprintf(archivo,"\n El valor ingresado fue... %s",cinta);
printf(" %i",estado);
printf("\n %s \n", cinta1);
getchar();
fprintf(archivo,"\n %i", estado);
fprintf(archivo,"\n %s \n", cinta1);
cinta [0]='x';
for(a=0;a<12;a++)
{
cinta[a+1]=cinta1[a];
}
do
{
if (cinta[ubicacion]==NULL)
{
terminar=1;
break;
}
else
if (estado==0)
{
if (cinta[ubicacion]=='$')
{
cinta[ubicacion]='$';
++ubicacion;
estado=1;
}
}
else
if (estado==1)
{
if (cinta[ubicacion]=='$')
{
cinta[ubicacion]='$';
++ubicacion;
estado=6;
}
else
if (cinta[ubicacion]=='0')
{
cinta[ubicacion]='0';
++ubicacion;
estado=1;
}
else
if (cinta[ubicacion]=='1')
{
cinta[ubicacion]='a';
--ubicacion;
estado=2;
}
}
else
if (estado==2)
{
if (cinta[ubicacion]=='$')
{
cinta[ubicacion]='$';
--ubicacion;
estado=3;
}
else
if (cinta[ubicacion]=='0')
{
cinta[ubicacion]='0';
--ubicacion;
estado=2;
}
else
if (cinta[ubicacion]=='1')
{
cinta[ubicacion]='1';
--ubicacion;
estado=2;
}
}
else
if (estado==3)
{
if (cinta[ubicacion]=='0')
{
cinta[ubicacion]='1';
++ubicacion;
estado=4;
}
else
if (cinta[ubicacion]=='1')
{
cinta[ubicacion]='2';
++ubicacion;
estado=4;
}
else
if (cinta[ubicacion]=='2')
{
cinta[ubicacion]='3';
++ubicacion;
estado=4;
}
else
if (cinta[ubicacion]=='3')
{
cinta[ubicacion]='4';
++ubicacion;
estado=4;
}
else
if (cinta[ubicacion]=='4')
{
cinta[ubicacion]='5';
++ubicacion;
estado=4;
}
else
if (cinta[ubicacion]=='5')
{
cinta[ubicacion]='6';
++ubicacion;
estado=4;
}
else
if (cinta[ubicacion]=='6')
{
cinta[ubicacion]='7';
++ubicacion;
estado=4;
}
else
if (cinta[ubicacion]=='7')
{
cinta[ubicacion]='8';
++ubicacion;
estado=4;
}
else
if (cinta[ubicacion]=='8')
{
cinta[ubicacion]='9';
++ubicacion;
estado=4;
}
else
if (cinta[ubicacion]=='9')
{
cinta[ubicacion]='0';
++ubicacion;
estado=3;
}
else
if (cinta[ubicacion]=='x')
{
cinta[ubicacion]='1';
++ubicacion;
estado=4;
}
}
else
if (estado==4)
{
if (cinta[ubicacion]=='$')
{
cinta[ubicacion]='$';
++ubicacion;
estado=5;
}
}
else
if (estado==5)
{
if (cinta[ubicacion]=='0')
{
cinta[ubicacion]='0';
++ubicacion;
estado=5;
}
else
if (cinta[ubicacion]=='1')
{
cinta[ubicacion]='1';
++ubicacion;
estado=5;
}
else
if (cinta[ubicacion]=='a')
{
cinta[ubicacion]='1';
++ubicacion;
estado=1;
}
}
else
{
terminar=1;
break;
}
printf(" ");
fprintf(archivo," ");
for(x=0;x {
printf(" ");
fprintf(archivo," ");
}
printf("%i",estado);
printf("\n %s \n", cinta);
fprintf(archivo,"%i",estado);
fprintf(archivo,"\n %s \n", cinta);
getchar();
}
while (terminar!=1);
printf("\n El resultado es: %s ", cinta);
fprintf(archivo,"\n El resultado es: %s ", cinta);
getchar();
getchar();
fclose (archivo);
return 0;
}

Ademas genera un archivo de texto para que imprimas el resultado...
Eso es todo...

1 comentario:

Anónimo dijo...

Esta chido