图灵机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);
}
}