图灵机的XN*2

图灵机

对于XN+1或XN2图灵机进行模拟,任意给定的十进制数a,转换为收缩扩展二进制的编码,再编程模拟此Turing机的运行过程,要求输出从开始运行起的每一步骤的结果。 用C或C++或java或python语言实现程序解决问题。
1.程序风格良好(使用自定义注释模板)
2.提供友好的输入输出,并进行输入数据的正确性验证。
算法分析
在进行图灵机的模拟时,首先要进行二进制的转换,这里我们调用了一个Java语言的内部方法“Integer.toBinaryString”,然后又用“toCharArray”将字符串类型改为字符数组型,便于调用。使用条件语句进行判断,将二进制转换为扩展二进制,再对扩展二进制进行XN
2运算。然后将得到的结果转回二进制,通过“Integer.parseInt”将二进制数转为十进制结果。
概要设计
在这里插入图片描述

//Transform.java
import java.util.*;
/**
 * 
 * @author lenovo青山不改旧
 * Apr 13, 2021
 * @Classname:Transform
 * @Description:TODO:定义一个转换类,对输入的数值进行转化。
 *
 */
public class Transform {
	 String binary_1 ="";//转换后的二进制
	 String extend_1="";//伸缩扩展二进制
	 /**
	  * 构造函数,用来输入计算的数字并转换为二进制成员变量
	  */
	  public Transform() {
		System.out.println("请输入一个十进制整数:");
		Scanner sca=new Scanner(System.in);
		int decimalism=sca.nextInt();
		binary_1 = Integer.toBinaryString(decimalism);//将十进制转换为二进制
		System.out.println("转换为二进制为:"+binary_1);
		 binary_1+=',';
	}
	  /**
	   * 
	   * @Title:convert
	   * @Description:TODO
	   * @param binary_2字符串数组容器
	   * @return void
	   * @throws
	   */
	public void convert() {
		char[] binary_2=binary_1.toCharArray();
		//将二进制转为伸缩扩展二进制
		for(int i=0;i<binary_2.length;i++) {
			if(binary_2[i]=='0') {
				extend_1+='0';
			}
			else if(binary_2[i]=='1') {
				extend_1+="10";
			}
			else if(binary_2[i]==',') {
				extend_1+="110";
			}
		}
		extend_1='0'+extend_1+'0';
		System.out.println("转换为扩展二进制为:"+extend_1);
	}
}
//Counting.java
/**
 * @author lenovo青山不改旧
 * Apr 13, 2021
 * @Classname:Counting
 * @Description:TODO:显示XN*2的过程并算出最后结果。
 *
 */
public class Counting extends Transform{
	String extend_3="";//XN*2的伸缩扩展二进制
	String binary_3="";//XN*2后的二进制
	/**
	 * 
	 * @Title:process
	 * @Description:TODO
	 * @param state内态
	 * @param extend_2存放转换前的伸缩扩展二进制编码
	 * @return void
	 * @throws
	 */
	public void process() {
		String state="0";
		char[] extend_2=extend_1.toCharArray();
		//进行XN*2
		for(int i=0;i<extend_2.length;) {
			if(state=="0"&&extend_2[i]=='0') {
				state="0";
				extend_2[i]='0';
				i++;
			}
			else if(state=="0"&&extend_2[i]=='1') {
				state="1";
				extend_2[i]='0';
				i++;
			}
			else if(state=="1"&&extend_2[i]=='0') {
				state="0";
				extend_2[i]='1';
				i++;
			}
			else if(state=="1"&&extend_2[i]=='1') {
				state="10";
				extend_2[i]='0';
				i++;
			}
			else if(state=="10"&&extend_2[i]=='0') {
				state="11";
				extend_2[i]='1';
				i++;
			}
			else if(state=="11"&&extend_2[i]=='0') {
				state="STOP";
				extend_2[i]='1';
				i++;
			}
			System.out.print("此时编码变为:");
			for(int j=0;j<extend_2.length;j++) {
				System.out.print(extend_2[j]+" ");
			}
			System.out.println("内态为:"+state);
		}
		//给成员变量赋值
		for(int i=0;i<extend_2.length;i++) {
			extend_3+=extend_2[i];
		}
	}
	/**
	 * 
	 * @Title:Result
	 * @Description:TODO
	 * @param extend_4字符串数组容器,存放转换后的伸缩扩展二进制编码
	 * @param result 最后的结果
	 * @return void
	 * @throws
	 */
	public void Result() {
		char[]extend_4=extend_3.toCharArray();
		//将伸缩扩展二进制变为二进制
		for(int i=0;i<extend_4.length;) {
			if(extend_4[i]=='1'&&extend_4[i+1]=='0') {
				binary_3+="1";
				i+=2;
			}
			else if(extend_4[i]=='0') {
				binary_3+="0";
				i+=1;
			}
			else if(extend_4[i]=='1'&&extend_4[i+1]=='1') {
				i+=2;
			}
		}
		System.out.println("转化后二进制为:"+binary_3);
		int result=Integer.parseInt(binary_3,2);//将二进制转换为十进制
		System.out.println("转化后十进制结果为:"+result);
	}
}

//Turing.java
/**
 * 
 * @author lenovo青山不改旧
 * Apr 13, 2021
 * @Classname:Turing
 * @Description:TODO用来调用图灵机
 *
 */
public class Turing {
	/***
	 * 
	 * @Title:main
	 * @Description:TODO主函数
	 * @param @param args
	 * @return void
	 * @throws
	 */
	public static void main(String[] args) {
		// TODO 自动生成的方法存根
		Counting tra=new Counting ();
		tra.convert();
		tra.process();
		tra.Result();
	}
}

运行结果
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值