关于JAVA对图灵机XN*2的模拟运行程序

对于XN*2图灵机进行模拟,任意给定的十进制数a,转换为收缩扩展二进制的编码,再编程模拟此Turing机的运行过程,要求输出从开始运行起的每一步骤的结果。
0 0->0 0R
0 1->1 0R
1 0->0 1R
1 1->10 0R
10 0->11 1R
11 0->0 1R
1.输入一个十进制整数
2.转换为二进制后转换为图灵编码
3.将此图灵编码进行计算
4.将计算好的编码转化为二进制
5.将计算好的编码转化为十进制
在这里插入图片描述

package 图灵机XN2;
import java.util.Random;
import java.util.Scanner;
public class TULING {
	//将十进制转换为所需要的图灵机编码
public static StringBuffer transform1(int a) {
    String b=Integer.toBinaryString(a);
	StringBuffer c=new StringBuffer(b.replace("1","10"));
	c.append("1100");
	return c;
}
//对图灵编码进行图灵计算
public static void process(StringBuffer a) {
	for(int i=0,inside=0;i<a.length();i++) {
		if(inside==0&a.charAt(i)=='0') {
			inside=0;
			a.setCharAt(i,'0');
			System.out.println("第"+(i+1)+"次转换为"+a+",此步骤内态转换为"+inside+",输出为"+a.charAt(i));
			continue;
		}
		if(inside==0&a.charAt(i)=='1') {
			inside=1;
			a.setCharAt(i, '0');
			System.out.println("第"+(i+1)+"次转换为"+a+",此步骤内态转换为"+inside+",输出为"+a.charAt(i));
			continue;
		}
		if(inside==1&a.charAt(i)=='0') {
			inside=0;
			a.setCharAt(i, '1');
			System.out.println("第"+(i+1)+"次转换为"+a+",此步骤内态转换为"+inside+",输出为"+a.charAt(i));
			continue;
		}
		if(inside==1&a.charAt(i)=='1') {
			inside=10;
			a.setCharAt(i, '0');
			System.out.println("第"+(i+1)+"次转换为"+a+",此步骤内态转换为"+inside+",输出为"+a.charAt(i));
			continue;
		}
		if(inside==10&a.charAt(i)=='0') {
			inside=11;
			a.setCharAt(i, '1');
			System.out.println("第"+(i+1)+"次转换为"+a+",此步骤内态转换为"+inside+",输出为"+a.charAt(i));
			continue;
		}
		if(inside==11&a.charAt(i)=='0') {
			inside=0;
			a.setCharAt(i, '1');
			System.out.println("第"+(i+1)+"次转换为"+a+",此步骤内态转换为"+inside+",输出为"+a.charAt(i));
			break;
		}
	}
}
//将图灵机编码重新转化为二进制
public static int transform2(StringBuffer a) {
	int b=Integer.valueOf(a.toString().replace("10","1"));
	return b;
}
//将二进制转化为十进制
public static int transform3(int a) {
	int b=Integer.parseInt(String.valueOf(a),2);
	return b;
}
public static void main(String[] args) {
	Scanner reader=new Scanner(System.in);
	System.out.println("图灵机XN*2模拟程序");
	System.out.print("请输入您想要转化的数字:");
	int a=reader.nextInt();
	StringBuffer b=transform1(a);
	System.out.println("图灵机运行前编码为:"+b);
	process(b);
	System.out.println("图灵机运行后编码为:"+b);
	b.delete(b.length()-2, b.length());           //删除后面的两个一
	int c=transform2(b);
	System.out.println("运行后编码转换二进制为:"+c);
	int d=transform3(c);
	System.out.println("最终结果为:"+d);
}
}

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

程序设计方法学第二次作业

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值