图灵机Turing XN*2

图灵机Turing XN*2

问题描述:基本要求: 对于XN+1或XN*2图灵机进行模拟,任意给定的十进制数a,转换为收缩扩展二进制的编码,再编程模拟此Turing机的运行过程,要求输出从开始运行起的每一步骤的结果。 用C或C++或java或python语言实现程序解决问题。

主要代码

conversion.java

  public String toBinaryString(int n) {
	        return Integer.toBinaryString(n);
	    }
	    public String conversion1(int a) {

	    	String str = toBinaryString(a);           //将输入的数字转化为二进制字符串
	    	char [] chars=str.toCharArray(); 			//将字符串转化为字符数组
	    	System.out.println("该数字转化为二进制的结果为:");
	    	System.out.println(Arrays.toString(chars));
	    	for(int i=0;i<chars.length;i++)
	    	{
	    		if(chars[i]=='1')
	    		{
	    			int index = i+1;
	    			char value = '0';

	    			char[] newArray = new char[chars.length + 1];
	    			for (int j = 0; j < chars.length; j++) {
	    				newArray[j] = chars[j];
	    			}
	    			for (int j = newArray.length - 1; j > index; j--) {
	    				newArray[j] = newArray[j - 1];
	    			}
	    			newArray[index] = value;
	    			chars = newArray;
	    			System.out.println(Arrays.toString(chars));

	    			
	    		}
	
	    		
	    	}
	    	chars = Arrays.copyOf(chars, chars.length + 1);
	    	chars[chars.length - 1] = '1';
	    	chars = Arrays.copyOf(chars, chars.length + 1);
	    	chars[chars.length - 1] = '1';
	    	chars =Arrays.copyOf(chars, chars.length + 1);
	    	chars[chars.length - 1] = '0';
	    	chars = Arrays.copyOf(chars, chars.length + 1);
	    	chars[chars.length - 1] = '0';
	    	
	    	System.out.println(Arrays.toString(chars));  //测试用 输出二进制结果

	    	String string1 = new String(chars);
	    	
	    	return string1;


	    	
	    	
	    }
	    public char turing(int neitai,char exchange){       //图灵机的具体运算过程

	    	if(neitai==0)
	    	{
	    		if(exchange=='0') ;
	    		
	    		else
	    		{
	    			this.neitai=1;
	    			exchange='0';
	    			}
	    		
	    	}
	    	else
	    	{
	    		if(neitai==1)
	    		    	{
	    		if(exchange=='0')
	    		{
	    			this.neitai=0;
	    			exchange='1';
	    		}
	    		else
	    		{
	    			this.neitai=10;
	    			exchange='0';
	    		}
	    	}
	    		else
	    		{
	    			if(neitai==10)
	    				if(exchange=='0')
	    				{
	    					this.neitai=11;
	    					exchange='1';
	    				}
	    			if(neitai==11)
	    				if(exchange=='0')
	    				{
	    					this.neitai=0;
	    					exchange='1';
	    		
	    				}
	    		}
	    	}

	    	return exchange;
	    	
	    }


		 public char[] turing1(char[] arr) {   //运算完成后,将伸缩扩展二进制转化为二进制
			 arr = Arrays.copyOf(arr, arr.length-1);   /*运算完以后的扩展二进制最后俩位一般为11.代表结束,转化为二
			 												进制需要删去后面俩个*/
			 arr = Arrays.copyOf(arr, arr.length-1);
			 
			 for(int i=0;i<arr.length;i++)
			 {
				 if(arr[i]=='1')
				 {
					 for (int j = i+1; j<arr.length-1; j++) {   //后面的元素覆盖前面的元素
						 arr[j] = arr[j+1]; 
						 } 

					 arr = Arrays.copyOf(arr, arr.length-1);     //减小数组1个长度,即删除最后一位

					 
				 }
	 
			 
			 }
		 return arr;
		 }

demo。java

import java.util.Arrays;
import java.util.Scanner;

public class Demo {

	public static void main(String[] args) {
		// TODO 自动生成的方法存根
    	int a ;
    	System.out.println("请输入一个十进制的数字:");
    	Scanner sc = new Scanner(System.in);
    	a = sc.nextInt();
		conversion c = new conversion();
		String str=c.conversion1(a);
		char [] chars=str.toCharArray();
//		int neitai=0;
		c.turing(0, '0');
//		char d;
//		char char1[]= {};
		System.out.println("图灵机具体运算过程为:");
		for(int i=0;i<chars.length;i++)
		{
			chars[i]=c.turing(c.neitai, chars[i]);
			System.out.println(Arrays.toString(chars));
			
//			neitai=d[0];
//			chars[i]=(char)(48+d[1]);
			
		}
		chars=c.turing1(chars);
		System.out.println(Arrays.toString(chars));
		c.display(chars);          //将二进制转化为10进制数字并输出
		
	//		System.out.println(d);
		

	}

}

结果测试

运行截图

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值