- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
HUNAN UNIVERSITY
计算理论导引
实验报告
题 目: 图灵机(Turing)的模拟 学生姓名: 学生学号: 专业班级: 计算机科学与技术2班 上课老师: 实验日期: 2014-1-6 目 录
一、实验目的 2
二、实验内容 2
三、实验代码 2
四、测试数据以及运行结果 8
五、实验感想 9
一、实验目的
1、掌握Turing机的概念。
2、掌握Turing机的运行过程,了解每一个格局的转化。
二、实验内容
对于任意给定的一台Turing机和任意给定的字符串w ( w不含空格),编程模拟此Turing机的运行过程,要求输出从开始运行起的每一格局。
三、实验代码
/*****************************************************************
图灵机的模拟过程
计科二班20110801212张琦佳
*****************************************************************/
# include stdio.h
# include fstream.h
# include iostream.h
ofstream outfile(homework.txt); //打开文件
# define N 1000 //纸带长度
# define S 10 //纸带前的空余
# define M 10 //数字长度
int state; //记录当前状态
int currentpos; //记录当前位置
int halt; //退出
int i; //临时辅助变量
int s; //临时存储状态
char tape[N]; //纸带长度
char number[M]; //存储x
char c1; //临时存储字符
char c2; //临时存储字符
char d; //方向输出
void start()
{
for(i = 0;i N - 1;i++) //初始化纸带
tape[i] = B;
tape[N-1] = \0;
cout使用图灵机计算f(x) = 2^x。其中x为二进制数字。endl;
while(1) //判断二进制
{
state = 1;
cout请输入二进制数字x = ;
cinnumber;
for(i = 0;i M number[i] != \0;i++)
if(number[i] 1 || number[i] 0)
state = 0;
if(state)
break;
else
cout无效数字。;
}
for(i = S;i S + M number[i-S] != \0;i++) //将数字写入纸带
tape[i] = number[i-S];
currentpos = S; //初始化
halt = 1; //此时state = 1
d = R; //初始为右移
coutendl其五元组如下:endl;
}
void homework() //写入文件
{
outfile 图灵机的实现过程endl;
outfile Turing..........endl;
outfile 计科2班张琦佳endlendl;
outfile使用图灵机计算f(x) = 2^x。其中x为二进制数字。endl;
outfile请输入二进制数字x = ;
outfilenumberendl;
outfileendl其五元组如下:endl;
}
void print() //输出函数
{
coutQs,c1,c2,d,Qstateendl;
outfileQs,c1,c2,d,Qstateendl;
}
void state1() //此时d = R;
{
while(state == 1)
{
c1 = c2 = tape[currentpos]; //暂存
s = s
文档评论(0)