对于XN*2图灵机进行模拟
1. 算法分析
利用java程序实现图灵机XN * 2首先需要完成数的进制转换,在static StringBuffer transform(int number)方法中将输入的十进制数转化为二进制原码的字符串,将1变为10,0 变为0,逗号变为110,并且返回一个要进行改编的代码。
2) 在static void Calculate(StringBuffer coding)方法中,将1)得到的编码按照如下规则进行变化
内态:0,输入为0----内态:0,输出为0,右移;
内态:0,输入为1----内态:1,输出为0,右移;
内态:1,输入为0----内态:0,输出为1,右移;
内态:1,输入为1----内态:10,输出为0,右移;
内态:10,输入为0----内态:11,输出为1,右移;
内态:11,输入为0----内态:0,输出为1,不移动,STOP;
3) 在主函数public static void main (String[] args)方法中实现了输入要测试到的数,并且将所有的过程保存到out.txt当中去。利用随机数的测试代码,将之在打印区输出。
2. 概要设计
3. 测试
out.txt显示.
输入的数:0
二进制编码后::0110
内态 输入 操作后 内态 输出
0---->0------->01100---->0---->0
0---->1------->00100---->1---->0
1---->1------->00000---->10--->0
10--->0------->00010---->11--->1
11--->0------->00011---->0---->1 STOP
0---->STOP
图灵机 操作后编码000110
译码后的十进制:0
输入的数:1
二进制编码后::10110
内态 输入 操作后 内态 输出
0---->1------->001100---->1---->0
1---->0------->011100---->0---->1
0---->1------->010100---->1---->0
1---->1------->010000---->10--->0
10--->0------->010010---->11--->1
11--->0------->010011---->0---->1 STOP
0---->STOP
图灵机 操作后编码0100110
译码后的十进制:2
输入的数:2
二进制编码后::100110
内态 输入 操作后 内态 输出
0---->1------->0001100---->1---->0
1---->0------->0101100---->0---->1
0---->0------->0101100---->0---->0
0---->1------->0100100---->1---->0
1---->1------->0100000---->10--->0
10--->0------->0100010---->11--->1
11--->0------->0100011---->0---->1 STOP
0---->STOP
图灵机 操作后编码01000110
译码后的十进制:4
输入的数:3
二进制编码后::1010110
内态 输入 操作后 内态 输出
0---->1------->00101100---->1---->0
1---->0------->01101100---->0---->1
0---->1------->01001100---->1---->0
1---->0------->01011100---->0---->1
0---->1------->01010100---->1---->0
1---->1------->01010000---->10--->0
10--->0------->01010010---->11--->1
11--->0------->01010011---->0---->1 STOP
0---->STOP
图灵机 操作后编码010100110
译码后的十进制:6
4. 调试
5. 心得体会
在此次的编写关于图灵机XN * 2 的java程序时,首先将图灵机的原理与每一步具体的变化理解清楚,再分析题目,分步去做模拟图灵机。查询了parseInt函数 以及 StringBuffer 的append 以及 delete 的函数调用.进制之前的转换.