第二章 图灵机
一.实验目的
- 掌握图灵机的概念和基本结构,理解图灵机的基本指令和编码方式;
- 掌握图灵机的编程方法。
- 实验内容
对于任意给定的一台Turing机和任意给定的字符串w ( w不含空格),编程模拟此Turing机的运行过程,要求输出从开始运行起的每一步骤的结果。
三.要求
完成实验报告包含以下内容:
1.题目分析
对于由如下指令给出图灵机(XN*2)在扩展的二进位上实现这个运算的指令:
00->00R,01->10R,10->01R,11->100R,100->111R,110->01STOP。输入一组字符串w(w不含空格),经过处理翻译命令,输出从开始运行起的每一步骤的结果。
2.算法构造
输入字符串,然后用if…else嵌套语句翻译命令,最后输出结果字符串
3.算法实现
#include<stdio.h> #include<string.h> void main() { int i; int len;//数组长度 char str[30];//定义字符串数组 int state=0;//内态 printf("请输入字符串(扩展二进位编码):");//提示输入扩展二进位编码 scanf("%s",&str); len=strlen(str);//求数组长度 for(i=0;i<len;i++)//循环字符串数组 { if(state==0&&str[i]=='0')//指令00->00R { state=0;//内态为0 str[i]='0';//输出为0 } else if(state==0&&str[i]=='1')//01->10R { state=1;//内态为1 str[i]='0';//输出为0 } else if(state==1&&str[i]=='0')//10->01R { state=0;//内态为0 str[i]='1';//输出为1 } else if(state==1&&str[i]=='1')//11->100R { state=10;//内态为10 str[i]='0';//输出为0 } else if(state==10&&str[i]=='0')//100->111R { state=11;//内态为11 str[i]='1';//输出为1 } else if(state==11&&str[i]=='0')//110->01STOP { state=0;//内态为0 str[i]='1';//输出为1 } printf("输出结果:%s\n",str);//输出字符串(数组) } }
4.调试、测试及运行结果
1)调试
通过运行结果发现最后三条指令11->100R,100->111R,110->01STOP不能运行
经过调试验证发现在11->100R指令运行后内态state没有改变还是0,于是将内态state由原来定义的char型改为int型,结果内态变为10。
2)测试
3)运行结果
5.经验归纳
1)定义为char型的变量,给其赋值应加’’。刚开始敲完代码发现运行结果的编码没有变,于是和同学讨论发现定义为字符型变量,给其赋值时应该加单引号,否则不能运行。
2)内态定义为字符型时,指令中的内态为10,11时不能运行,于是将其改为int型就好了。
3)学会如何定义字符数组,如何输入输出字符串数组。
4)c语言基础不太好,之前敲的代码太少,从现在开始应多上手敲代码,遇到问题应主动找办法解决,不能退缩。