一、实验目的
-
掌握图灵机的概念和基本结构,理解图灵机的基本指令和编码方式;
-
掌握图灵机的编程方法。
二、实验内容
对于任意给定的一台Turing机和任意给定的字符串w ( w不含空格),编程模拟此Turing机的运行过程,要求输出从开始运行起的每一步骤的结果。
三、实验报告
1.题目分析
我准备要做的是XN*2的图灵机模拟。
(1) 我通过书本知识知道了它的运行过程:
00->00R:内态和纸带上的数字都为0时,不改变;
01->10R:内态为0数字为1时,内态变为1数字变为0;
10->01R:内态为1数字为0时,内态变为0数字变为1;
11->100R:内态为1数字为1时,内态变为10数字变为0;
100R->111R:内态为10数字为0时,内态变为11数字变为1;
110R->01STOP:内态为10数字为1时,内态变为0数字变为0。
(2) main函数的构造,分为五部分:输入,判断,计算,输出,测试。
输入输出通过定义的一维数组来存放扩展二进制数字;
判断通过(a[i]!=‘0’)&&(a[i]!=‘1’)来判断输入数据的正确性;
计算部分通过if-else语句实现内态变化的输出;
测试方面通过clock()计时函数判断运行时间。
2.算法构造
分析构造:
(1)定义数组时需要定义为字符型数组;
(2)开始时定义一个p作为内态变化的标志,表示的是一个状态;
(3)用if-else语句通过与逻辑判断a[i]输入的字符是否是0或1,不是则输出—输入数据错误!,否则执行下一步,即计算算法;
(4)计算部分使用if-else语句通过与逻辑判断q与a[i]的状态,输出每一次的变化后的字符串;
(5)测试部分设置clock()计时函数具体实现过程如下:clock_t start,finish;