图灵机XN*2,python实现

**## 图灵机XN*2,python实现

内容:
对于XN+1或XN*2图灵机进行模拟,任意给定的十进制数a,转换为收缩扩展二进制的编码,再编程模拟此Turing机的运行过程,要求输出从开始运行起的每一步骤的结果。 用C或C++或java或python语言实现程序解决问题。
1).程序风格良好(使用自定义注释模板)
2).提供友好的输入输出,并进行输入数据的正确性验证。

步骤:

  1. 算法分析

    1.1输入一个十进制数转化为二进制添加逗号
    1.2二进制转化为拓展码 (1–10;0–0;逗号–110)
    1.3图灵机操作拓展码,输出新的输出态度
    1.4新的输出态转化为拓展码(按照给定的表)
    0 0—>0 0R
    0 1—>1 0R
    1 0—>0 1R
    1 1—>10 0R
    10 0—>11 1R
    11 0—>0 1STOP
    1.5转化为十进制

  2. 概要设计(包括数据结构及算法绘制流程图或伪代码表示)

进行进制转换,将二进制转化为十进制

将二进制转化为拓展码,0—0;1—10;逗号–110

然后将拓展码根据图灵机XN*2根据对应的指令表转化为新的输出态和新的内态。利用if-elif实现。

将得到的输出态根据拓展码转化为十进制 0—0;10—1;110—逗号,最后转化为十进制表示。

  1. 测试(设计测试用例或测试代码的设计与实现,测试结果截屏))

  2. 调试(对测试出的问题进行调试,界面截屏,调试修正编码)

监控内态和输出态的写入是否正确,符合预期的效果。

  1. 心得体会(关键问题的解决思路及步骤总结)
    对于列表套列表时将里边的列表当作是外边的列表元素处理,将里边的列表剥离出来时只需要另新建变量使其等于外边列表的其所处的索引。
    python函数之间传值时可能会出现值变化的情况,此时一定要注意传参顺序,和传参的数据类型。另外,python可将函数作为参数传入另一个函数,此时就需要注意函数是否被重复调用。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
下面是一个基本图灵机Python实现,它将输出"Hello, World!": ```python tape = [0] * 1000 tape_pos = len(tape) // 2 # 定义移动指针的函数 def move_left(): global tape_pos tape_pos -= 1 if tape_pos < 0: print("Error: Tape index out of bounds") exit(1) def move_right(): global tape_pos tape_pos += 1 if tape_pos >= len(tape): print("Error: Tape index out of bounds") exit(1) # 定义写入和读取指令的函数 def write(value): tape[tape_pos] = value def read(): return tape[tape_pos] # 定义图灵机的指令 # 状态0:初始化纸带上的字母 # 状态1:输出Hello, World! state = 0 while state != 2: if state == 0: write(ord('H')) move_right() state = 1 elif state == 1: write(ord('e')) move_right() state = 2 elif state == 2: write(ord('l')) move_right() state = 3 elif state == 3: write(ord('l')) move_right() state = 4 elif state == 4: write(ord('o')) move_right() state = 5 elif state == 5: write(ord(',')) move_right() state = 6 elif state == 6: write(ord(' ')) move_right() state = 7 elif state == 7: write(ord('W')) move_right() state = 8 elif state == 8: write(ord('o')) move_right() state = 9 elif state == 9: write(ord('r')) move_right() state = 10 elif state == 10: write(ord('l')) move_right() state = 11 elif state == 11: write(ord('d')) move_right() state = 12 elif state == 12: write(ord('!')) state = 13 elif state == 13: move_left() state = 14 elif state == 14: if read() == 0: state = 15 else: move_left() state = 14 elif state == 15: move_right() state = 16 elif state == 16: if read() == 0: state = 17 else: move_right() state = 16 elif state == 17: move_right() state = 18 elif state == 18: if read() == 0: state = 19 else: move_right() state = 18 elif state == 19: move_left() state = 20 elif state == 20: if read() == ord('!'): state = 21 else: move_left() state = 20 elif state == 21: for value in tape: print(chr(value), end='') state = 2 else: print("Error: Invalid state") exit(1) ``` 在这个程序中,我们定义了一个长度为1000的纸带,初始值全部为0。tape_pos表示纸带上当前的位置,初始值为纸带长度的一半。我们提供了三个基本操作:向左移动、向右移动、写入值以及读取值。接下来,我们定义了一个状态机,初始状态为0。当状态为0时,将'H'写入纸带上,并向右移动到状态1。在状态1到11中,将'Hello, World!'写入纸带上并移动指针。在状态12中,输出纸带上的内容,并结束程序。 运行以上Python代码将输出"Hello, World!"。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值