利用图灵机自然数乘2(XN*2)的功能

一.问题描述
我所写的是利用图灵机实现XN2功能。它一共有6个指令:
00 → 00R
01 → 10R
10 → 01R
11 → 100R
100→ 111R
110→ 01STOP
所要表达的意思就是当左边内态与输入变化时,右边下一内态与输出就会有所变化。而且随着这个指令的变化,就会实现XN
2的功能.例如:
输入***3→转化为(11,)→01010110
6→110,→0010100110***
我们的程序所要实现的就是将3后面的字符串转化为6后面的。

二…完整代码

#include <iostream>
#include<stdio.h>
using namespace std; 

//将二进制数扩展为二进位 
int ChangeBinary(int a[],int b[],int i)
{   	
        int p=1;    
        while(i)
        {		
                 if(!a[i]){      //"0"表示为0 			
                 b[p++]=0;		
                 }		
                 else{        
                   //"1"表示为10 		    
                   b[p++]=1;			
                   b[p++]=0;		
                   }		
                   i--;
                   	
        }	             
         //","表示为110 	
         b[p++]=1;	
         b[p++]=1;	
         b[p++]=0;	
         return p;
    }  
    void Instruct(int b[],int p)
    {
        int flag=0,m,y;    
        for(m=0;1;m++)
        {	
        	if(flag==0&&b[m]==0){

             flag=0;		   
             b[m]=0;		
       }	else if(flag==0&&b[m]==1){	
       	   flag=1;		   
       	   b[m]=0;	
     }
else if(flag==1&&b[m]==0){	
       	   		   flag=0;	
       	   		   b[m]=1;	
       	   		   	   	}	
       	   		   	   		
 else if(flag==1&&b[m]==1)
 {		   
 flag=10;		   
 b[m]=0;	
 }		
 else if(flag==10&&b[m]==0)
 {	
 	   flag=11;		 
 	  b[m]=1;		
}else if(flag==11&&b[m]==0)
{	
	   flag=0;	
	   b[m]=1;		  
	    for(y=0;y<p+2;y++){  
	                 cout<<b[y];		 
	   }		   
	   cout<<endl;		 
	   break;
}       
 for(y=0;y<p+2;y++){   
          cout<<b[y];		
 }		
 cout<<endl;	
}	
} 
 int main()
 {
 	int a[100];	
 	int b[100]={0};   	
 	int n,k,p,j=0,temp=0;	
 	cout<<"请输入一个十进制的数:";	
 	cin>>n;    	//将十进制转化为二进制 	
 	int i=-1;	
 	while(n){	
 	  i++;	 
 	   a[i]=n%2;	  
 	   n=n/2;	
 	 } 	
 	 cout<<"转化成扩展的二进位编码为:"<<endl;     //转化成扩展的二进位编码    
 	 p=ChangeBinary(a,b,i);    
 	 Instruct(b,p);    
 	 return 0;
}

三.调试
一开始,只能输出一个十进制数的扩展位,例如,输入3,不能实现*2。
在这里插入图片描述
经过调试:
在这里插入图片描述
在这里插入图片描述
四.测试
在这里插入图片描述

在这里插入图片描述

五.总结
在我看到问题时,没有一点头绪,不知如何开始,我到现在都是懵的,因为我不会写,我就借鉴了别人的,看看人家是怎么想的,自己为啥想不出来。
然后在写的过程中,又不知道指令该怎么表达,于是不停的出现问题。指令与实际输出不符,而且在调试过程中发现有一部分数组的已经超过了整型变量的范围了。随后程序输出不能实现加一的功能,一开始想着可能是因为加一那部分代码程序没有读进去,但最后经过认真思考,实现了功能。我在写的过程中参考着别人的代码,然后结合自己的理解,虽然完成的不是很好,但我认真地思考了,也渔别人讨论了自己的想法。
在写的时候有同学给我说可以把每一部分的指令放进一个函数中,最终只需要调用几个函数就可以了,顿时豁然开朗。也觉得操作起来特别方便。
同时要反思为什么别人想到了而我没想到,什么方法用起来简单,处理问题方便呢?

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值