实现图灵机中Xn*2的算法计算

图灵机,又称图灵计算、图灵计算机,是由数学家艾伦·麦席森·图灵(1912~1954)提出的一种抽象计算模型,即将人们使用纸笔进行数学运算的过程进行抽象,由一个虚拟的机器替代人们进行数学运算。
所谓的图灵机就是指一个抽象的机器,它有一条无限长的纸带,纸带分成了一个一个的小方格,每个方格有不同的颜色。有一个机器头在纸带上移来移去。机器头有一组内部状态,还有一些固定的程序。在每个时刻,机器头都要从当前纸带上读入一个方格信息,然后结合自己的内部状态查找程序表,根据程序输出信息到纸带方格上,并转换自己的内部状态,然后进行移动

实现图灵机中Xn*2的算法计算
使用flag代表图灵机的内态,num[i]代表纸带上第i个位置的数据;
在图灵机中,输入的数据为某个整数的二进制的伸展后的数据序列;
例如 int 3;
其二进制为11,伸展后的数据序列为01010110。即两个相邻的0之间1的个数,0110代表逗号,即停止;
实现图灵机中Xn*2的算法计算
三:具体程序

#include<stdio.h> 
int main()
{
int i,b;
int a=11;
int flag=0;
int num[100];

printf("输入数据长度\n");
scanf("%d",&b);
for(i=0;i<100;i++)
{num[i]=0;
}
printf("输入数据\n");
for(i=0;i<b;i++)
scanf("%d",&num[i]);
for(i=0;i<a;i++)
	{
       if(flag==0&&num[i]==0)
	   {flag=0;
	   num[i]=0;
	   }
	   
	   if(flag==0&&num[i]==1)
	   {flag=1;
	   num[i]=0;
	  }

      else if(flag==1&&num[i]==0)
	   {flag=0;
	   num[i]=1;
	  }

      else if(flag==1&&num[i]==1)
	   {flag=10;
	   num[i]=0;
	  }

       else if(flag==10&&num[i]==0)
	   {flag=11;
	   num[i]=1;
	 }

       else if(flag==11&&num[i]==0)
	   {flag=0;
	   num[i]=1;}
 
	   printf("flag=%d,num[%d]=%d \n",flag,i,num[i]);	
		 		}
		for(i=0;i<10;i++)
			printf("%d",num[i]);

}

六:心得体会
通过完成这次的程序设计以及报告,我更清楚地了解了图灵机基本的动作方法,并掌握了一些基本的图灵机运算,比如Xn*2,Xn+1等等,让我对计算机基本的原理也有了一些基本的认识。更让我了解了图灵先生如此开创先河的智慧,我们都应该学习这种创新的精神。
这次的设计中,还存在许多缺陷,我认为最大的一个缺陷就是数据的输入,在图灵机中,我们使用的是二进制进行伸缩后的数据序列,可在这个程序中,我并没有做到能够由键盘输入一个整数,通过程序使其成为能够被图灵机运作的数据序列,所以还要继续努力,改进缺陷,使得程序能够更完美。