一.题目名称:
“图灵机”
二.题目内容
对于任意给定的一台turing机和任意给定的字符串w(w不含空格),编程模拟turing机的运行过程,要求输出从开始运行起的每一步的结果。用C/C++/Java/Python实现程序解决问题。
三.算法设计
1.输入数字
2.使用内置方法bin()将数字转化为二进制付给字符串
3.将二进制写为扩展形式.读到1输出加上10,否则加0,最后加110
4.将扩展形式转化为命令过程,定义一个index表示内态,利用for i in range()做循环字符串读取,在循环使用条件选择语句模拟命令规则
5.将命令结果缩略为二进制的扩展形式,遇到01或者10输出1,遇到00输出0,遇到110输出2
6.将扩展形式化为标准二进制数
7.将二进制数还原为十进制
python代码
import math
#从键盘输入十进制数
print("请输入一个十进制数:")
w = int(input())
#使用内置方法bin(),将十进制转为二进制
a = bin(w)
str1 = str(a)
print("该数的二进制数为:%s"%str1)
#将二进制转化为扩展形式
def expand(str1):
str2 = str()
for i in range(len(str1)):
if(str1[i] == "1"):
str2 = str2+"10"
else:
str2 = str2+"0"
str2+="110"
str2=str2[1:]
return str2
#将扩展形式转化为命令过程
def command(str2):
print("您输入数字二进制扩展形式图灵机XN*2命令过程为:" )
str2=str2+"00"
print(str2)
str3 = str()
index = 0 #内态
for i in range(1,len(str2)):
if(index == 0 and int(str2[i])==0): #内态为0输出为0———>内态为0输出为0右移一位
str3 = str2[:i] + "0" +str2[i+1:]
print(str3)
str2=str3
elif(index ==0 and int(str2[i])==1): #内态为0输出为1———>内态为1输出为0右移一位
index = 1
str3 = str2[:i] + "0" + str2[i+1:]
print(str3)
str2=str3
elif(index==1 and int(str2[i])==0): #内态为1输出为0———>内态为0输出为1右移一位
index = 0
str3 = str2[:i] + "1" + str2[i + 1:]
print(str3)
str2=str3
elif(index==1 and int(str2[i])==1): #内态为1输出为1———>内态为10输出为0右移一位
index = 10
str3 = str2[:i] + "0" + str2[i + 1:]
print(str3)
str2=str3
elif (index == 10 and int(str2[i]) == 0): #内态为10输出为0———>内态为11输出为1右移一位
index = 11
str3 = str2[:i] + "1" + str2[i + 1:]
print(str3)
str2=str3
elif(index == 11 and int(str2[i]) == 0): #内态为11输出为0———>内态为0输出为1停机
index == 0
str3 = str2[:i] + "1" + str2[i + 1:]
print(str3)
print("STOP")
break
return str3
#将命令结果缩写为二进制的扩展形式
def contract(str3):
str4=str()
for i in range(1,len(str3)-4,2):
if(str3[i]+str3[i+1] == "01" or str3[i]+str3[i+1] == "10"):
str4=str4+"1"
elif(str3[i]+str3[i+1] == "00"):
if(str3[i+2]=="0"):
str4=str4+"00"
else:
str4=str4+"0"
return str4
#将二进制的扩展形式转化为缩略形式
def restore(str4):
str5=str()
for i in range(len(str4)):
if(str4[i]!="2"): #没有读到2的时候将值赋给str5,读到2的时候break
str5 += str4[i]
else:
break
return str5
str2=expand(str1)
print("您输入数字的二进制扩展形式为:%s"%str2)
str3=command(str2)
print("命令转化结果为:%s"%str3)
str4=contract(str3)
print("将命令转化结果缩写为二进制的扩展形式为:%s"%str4)
str5=restore(str4)
print("二进制的缩略形式为:%s"%str5)
#将二进制还原为十进制
num = int(str5, 2) #要转化的字符串为str5,进制数为2进制
print("二进制进制转化为十进制为:%d"%num)
print("恭喜您 图灵机XN*2命令转换成功")
print("您已完成%d的倍数计算"%w)