如何用Java模拟XN*2图灵机

网友投稿 271 2023-01-22

如何用Java模拟XN*2图灵机

题目描述:

对于XN*2图灵机进行模拟,任意给定的十进制数,转换为收缩扩展二进制的编码,再编程模拟此Turing机的运行过程,要求输出从开始运行起的每一步骤的结果。用C或C++或java或python语言实现程序解决问题。

0;要求:1. 程序风格良好(使用自定义注释模板);

2. 提供友好的输入输出,并进行输入数据的正确性验证。

算法分析:

1. 将十进制数转换为二进制数;

2. 将二进制数转换为收缩扩展二进制的编码;

3. 根据当前的内态和输入执行XN*2图灵机的指令;

4. 将结果的二进制编码转换为二进制数;

5. 将二进制数转换为十进制数,实现乘2运算功能。

概要设计:

算法流程图如下:

测试:

输入的十进制数

正确的二进制编码

输出的二进制编码

正确的运算结果

输出的运算结果

0

0011000

0011000

0

0

3

0101011000

0101011000

6

6

http://

18

0100010011000

0100010011000

36

36

运行结果:

调试:

①对调用指令的方法进行调试,开始时binCodeList的size为0,导致执行binCodeList.set(i, “0”)时出现错误,进过调试后发现是因为没给方法设置binCodeList的参数,导致方法中用的是类中空的binCodeList。在方法的参数中加上List binCodeList就可以解决。

②对将二进制编码转换为十进制数的方法进行调试,开始时运算结果出现错误,调试后发现是判断第i个字符为1,第i+1个字符为0后,没有将i再加1,导致下次循环又遍历到i+1的0,于是有些步骤结果就会多出0。在if (binCode.charAt(i + 1) == '0'){…}代码块中加上i++就可以解决。

源代码:

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Java基本知识点之变量和数据类型
下一篇:豆瓣电影api什么意思(豆瓣官方api)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~