1.算法分析
(1)将十进制数转换为二进制数
接收一个十进制数的输入,转换为二进制数在末尾添加一个‘,’号,按照规则进行数据转换。
编码转换规则:0→0;1→10;, →110;
(2)将二进制数转换为收缩扩展二进制的编码
处理方法:
内态为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)结果输出
将图灵机结果利用规则转换为二进制和十进制。
编码转换规则:0→0;10→1;110 →,;
2. 概要设计
(1)结构设计
该程序由Test与Function类组成,程序通过输入的十进制数据利用Function类的toBinCode方法将其二进制化后,将结果赋给Test类的setBinCode方法将二进制数据转换为图灵机二进制编码。
利用Test类的runProess方法启动图灵机,该方法将二进制码binCode转换为ArrayList类型存放在binCodeList中,并对binCodeList进行遍历,根据当前内态的值判断该执行哪条指令,该功能有Switch语句实现,每一个跳转语句中包含一个对应状态下的执行指令方法:instruction_1~ instruction_4。这些方法依据这XN*2型图灵机编码转换规则进行的。通过每一步的计算来修改binCodeList的值,直到达到终止条件即S=1时,停止循环,并将苏数据返回。
将返回的处理好的图灵机结果,并将binCodeList转换为String类型的二进制编码binCode,再转换为int类型的十进制数decNum最终将结果输出。
(2)算法流程
图1 算法流程图
3. 测试
输入数据,查看每步结果:
图2 测试代码
图3 测试结果
4.调试
通过debug工具,进行程序追踪。
图4 测试类调试
5.心得体会
对XN*2型图灵机有了更深的了解,通过程序代码的方式实现了图灵机运算流程,非常有意思。