图灵机(XN*2)

 

 

      对于任意给定的一台Turing机和任意给定的字符串w ( w不含空格),编程模拟此Turing机的运行过程,要求输出从开始运行起的每一步骤的结果。

 

1. 掌握图灵机的概念和基本结构,理解图灵机的基本指令和编码方式;

2.掌握图灵机的编程方法;

程序框图

   图灵机XN*2在扩展二进位上实现运算指令为:

0 0->0 0 R        0 1->1 0 R         1 0->0 1 R

1 1->10 0 R       10 0->11 1 R       11 0->0 1 STOP

算法设计:

建立一个TL类,在其中定义panduan()函数。在panduan()函数中定义数组shuru[],依次在键盘上输入数据,将初始内态设为0。利用if-else if 语句根据运算指令判断内态和输出的变化,每次循环用continue语句,结束本次循环,进入下一个循环,最后一个指令用break语句,结束循环输出结果。

源代码

#include <iostream>

using namespace std;

 

class TL//建立一个TL类

{

public:

       int panduan();

};

int TL::panduan()//判断函数  panduan()

{

       int n;

       int shuru[11];

       int neitai=0;

    cout<<"请输入拓展二进位编码:"<<endl;

    for(int s=0;s<11;s++)//将输入拓展二进位编码设置为11位数

    {

              cin>>shuru[s];

    }

       for (int i=0;i<11;i++)

       {

              if (shuru[i]==0 && neitai==0)//00->00

       {

       shuru[i]=0;

       neitai=0;     

       cout<<"内态变为0,输出变为0。输出为:";     

              for(int j=0;j<11;j++)

              {

              cout<<shuru[j];

              }

              cout<<endl;

       continue;//跳出本次循环,进行下一次循环

       }

       else if (shuru[i]==1 && neitai==0)//01->10

       {

       shuru[i]=0;

       neitai=1;

       cout<<"内态变为1,输出变为0。输出为:";

              for(int j=0;j<11;j++)

              {

              cout<<shuru[j];

              }

              cout<<endl;

       continue;

       }

       else if (shuru[i]==0 && neitai==1)//10->01

       {

       shuru[i]=1;

       neitai=0;

       cout<<"内态变为0,输出变为1。输出为:";

              for(int j=0;j<11;j++)

              {

              cout<<shuru[j];

              }

              cout<<endl;

       continue;

       }

       else if (shuru[i]==1 && neitai==1)//11->10 0

       {

       shuru[i]=0;

       neitai=10;

       cout<<"内态变为10,输出变为0。输出为:";

                     for(int j=0;j<11;j++)

              {

              cout<<shuru[j];

              }

                     cout<<endl;

       continue;

       }

       else if (shuru[i]==0 && neitai==10)//10 0->11 1

       {

       shuru[i]=1;

       neitai=11;

       cout<<"内态变为11,输出变为1。输出为:";

              for(int j=0;j<11;j++)

              {

              cout<<shuru[j];

              }

              cout<<endl;

       continue;

       }

       else if (shuru[i]==0 && neitai==11)//11 0->0 1 stop

       {

    shuru[i]=1;

       neitai=0;

       cout<<"内态变为0,输出变为1。输出并停止:";

              for(int j=0;j<11;j++)

              {

              cout<<shuru[j];

              }

              cout<<endl;

       break;

       }

       }

       return 0;

}

 

void main()

{

TL t;

t.panduan();//对象t调用panduan()

}

测试及调试

键盘输入拓展二进制编码010010110000,求得XN*2为001001001100.即5的2倍为10。

.总结

   理解图灵机拓展二进位的乘2运算,了解内态和输出的变化。本程序可自行输入拓展二进位编码,从而得出XN*2结果。缺点是:当二进制编码数大于设定的数组长度时,需改动panduan()函数中循环次数,改动地方过多。程序可进一步优化为将最终输出拓展二进位编码转换为二进制,最终转为十进制,便于观察。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值