图灵机的编程实现

一、题目分析:

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

2.分析:

第一步:十进制数转化为二进制数;

第二步:给转化好的十进制数上识别’0’或’1’,并将0转化为0,1转化为10,并加上逗号,其用数字表示为110.

第三步:利用for循环以及if条件语句,将每一种内态和输入的结果表示出来,并有最终的运行操作。

二、算法构造:

流程图:

 

 

三、算法实现:

整体代码:

#include<iostream>

#include<string>

using namespace std;

void main()//转化函数,十进制数转化为二进制数,并将更改后的编码输出(包括逗号)

{  

int m,i,j,k,a[30];

int s=0;

cout<<"请输入想要转化的十进制数:"<<endl;

    cin>>m;

 

for(i=15;i>=0;i--)

{

k=m%2;

j=m/2;

m=j;

a[i]=k;

}//用数组记录除以二的余数

for(i=0;i<16;i++)

 

   cout<<a[i];//将除二余数倒序输出。

  

}

cout<<"    ";

for(i=0;i<18;i++)

{ if(a[i]==1)

   {

   for(j=18;j>=i;j--)

   {

   a[j+1]=a[j];

   }

   a[i+1]=0;

   }

   

cout<<a[i];

}

      a[18]=1;a[19]=1;a[20]=0;

 

cout<<a[18]<<a[19]<<a[20]<<endl;//输出逗号所代表的值

a[21]=0,a[22]=0,a[23]=0,a[24]=0,a[25]=0;

for(i=13;i<25;i++)//根据不同的内态,不同的输入,会对图灵机上的输出造成的结果

{

if(s==0&&a[i]==0)

{

            a[i]=0;

s=0;

for(j=0;j<21;j++)

{

cout <<a[j];

}

cout<<"  ";

continue;//内态为0,输入为0时,输出为0,下一内态也为0

 

 

}

if(s==0&&a[i]==1)

{

a[i]=0;

s=1;

 

for(j=0;j<21;j++)

{

cout <<a[j];

}cout<<"  ";

continue;//内态为0,输入为1时,输出为0,下一内态为1

}

if(s==1&&a[i]==0)

{

a[i]=1;

s=0;

 

for(j=0;j<21;j++)

{

cout <<a[j];}cout<<"  ";

continue;

}//内态为1,输入为0时,输出为1,下一内态为0

if(s==1&&a[i]==1)

{

s=10;a[i]=0;

     for(j=0;j<21;j++)

{

if(j==i)

{

a[j]=0;

}

cout <<a[j];}

          cout<<"  ";

          

continue;

 }//内态为1,输入为1时,输出为0,下一内态为10

if(s==10&&a[i]==0)

{ a[i]=1;

s=11;

for(j=0;j<22;j++)

{

cout <<a[j];}

cout<<"  ";

 

continue;

}//内态为10,输入为0时,输出为1,下一内态为11

if(s==11&&a[i]==0)

{

a[i]=1;

s=0;

for(j=0;j<23;j++)

{

 

cout <<a[j];

}//内态为11,输入为0时,输出为1,下一内态为0

cout<<"  ";

break:

}

}

}

       本程序是以书上的图灵机运行过程为最开始的模板,存在十进制数转二进制数,二进制数转化为图灵机编码的过程,整个过程比较流畅,但由于并非用字符串来完成会有一些在数组取之上的问题,在这个问题上必须严格把关,如果不注意,就会将机子上随机产生的乱码作为你前面数字输入完成后的占位所用的数字。会对自己的整个程序结果造成影响。

  

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python 是一种流行的编程语言,它可以用于构建各种类型的应用程序,包括图灵机图灵机是一种理论模型,用于描述计算和自动化。它由英国数学家艾伦·图灵提出,被认为是计算机科学的重要基础。 在 Python 中,你可以使用基本的编程概念和数据结构来模拟图灵机的行为。例如,你可以使用条件语句、循环和变量来控制图灵机的状态转移和符号操作。你可以通过定义状态集合、符号集合、转移函数和停机状态来实现图灵机的功能。 以下是一个简单的 Python 代码示例,模拟了一个简化的图灵机: ```python # 定义图灵机的状态集合 states = {'q0', 'q1'} # 定义图灵机的符号集合 symbols = {'0', '1'} # 定义转移函数 transitions = { ('q0', '0'): ('q1', '1', 'R'), ('q1', '1'): ('q0', '0', 'L'), ('q1', '0'): ('q1', '1', 'R') } # 定义初始状态和输入串 initial_state = 'q0' input_string = '000111' # 初始化图灵机 current_state = initial_state tape = list(input_string) head_position = 0 # 模拟图灵机运行 while current_state != 'q1': symbol = tape[head_position] if (current_state, symbol) not in transitions: raise Exception('No transition defined for current state and symbol') new_state, new_symbol, move = transitions[(current_state, symbol)] tape[head_position] = new_symbol if move == 'R': head_position += 1 elif move == 'L': head_position -= 1 current_state = new_state # 输出最终的结果 output_string = ''.join(tape) print('Output:', output_string) ``` 请注意,这只是一个简化的示例,实际的图灵机可能更加复杂。在实际应用中,你可能需要使用更高级的编程技术和库来处理更复杂的图灵机模型。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值