##模拟图灵机 XN*2的运算(文末源代码)
题目要求:

  1. 对XN*2图灵机进行模拟,任意给定的十进制数a,转换为收缩扩展二进制的编码,再编程模拟此Turing机的运行过程,要求输出从开始运行起的每一步骤的结果。
    用C或C++或java或python语言实现程序解决问题。

    1.程序风格良好(使用自定义注释模板)
    2.提供友好的输入输出,并进行输入数据的正确性验证。

2.算法分析
对XN2图灵机进行模拟,给定一个任意的十进制数,首先应该将十进制数用二进制表示出来,将二进制数转换为收缩扩展二进制的编码;根据当前的内态和输入执行XN2图灵机的指令;将结果的二进制编码转换为二进制数; 将二进制数转换为十进制数,实现乘2运算功能。相应转换为二进制之后“1”对应变为10,“0”变为0,“,”变为110,然后根据图灵机指令进行运算得出结果,再输出结果即可,图灵机XN*2在拓展的二进位上实现这个运算的指令如下:
0 0 ->0 0 R,
0 1 ->1 0 R,
1 0 ->0 1 R,
1 1 ->10 0 R,
10 0 ->11 1 R,
11 0 ->0 1 STOP。
3.概要设计(包括数据结构及算法绘制流程图或伪代码表示)

转换为二进制之后“1”对应变为10,“0”变为0,“,”变为110
int ChangeBinary(int a[],int b[],int i)
{
int p=1;
while(i)
{
if(!a[i]){ //"0"表示为0
b[p++]=0;
}
else{
//"1"表示为10
b[p++]=1;
b[p++]=0;
}
i–;

    }                 //","表示为110  b[p++]=1;    b[p++]=1;    b[p++]=0;    return p;

}

XN*2图灵机指令代码实现:
void Instruct(int b[],int p)
{
int flag=0,m,y;
for(m=0;1;m++)
{
if(flag==0&&b[m]==0){

         flag=0;           b[m]=0;     }   else if(flag==0&&b[m]==1){  flag=1;           b[m]=0; }

else if(flag==1&&b[m]==0){
flag=0;
b[m]=1;
}

else if(flag==1&&b[m]1)
{
flag=10;
b[m]=0;
}
else if(flag10&&b[m]0)
{
flag=11;
b[m]=1;
}else if(flag11&&b[m]==0)
{
flag=0;
b[m]=1;
for(y=0;y<p+2;y++){
cout<<b[y];
}
cout<<endl;
break;
}
for(y=0;y<p+2;y++){
cout<<b[y];
}
cout<<endl;
}
}

流程图如下:

4.测试(设计测试用例或测试代码的设计与实现,测试结果截屏)
测试实现结果如下,输入十进制数7,成功模拟了图灵机流程,并得到了正确的结论。

5.调试(对测试出的问题进行调试,界面截屏,调试修正编码)
一开始,只能输出一个十进制数的扩展位,例如,输入3,不能实现*2,它的扩展二进制是错误的。

经过调试后解决了问题:

6.心得体会(关键问题的解决思路及步骤总结)
不足:此次图灵机的实验对我来说还是有很大难度的,虽然开始理解了图灵机的思想,但是真正上机操作的时候还是有很多问题。例如十进制和二进制之间的转化,想的很简单,但是实际做起来有许多的问题,一个十进制中,整型,字符型和字符数组之间的转化,字符连接、替换等过程都有或多或少的问题,在上网查询了相关资料后才有了了解,但是程序依旧有很多不足需要完善。
7.收获:此次实验我也学到了许多知识。如:C++中ostringstream myos将int型转化为字符串,并且对循环计算十进制转换二进制有了更深的研究,同样细心还是非常重要的,“==”刚开始写成了“=”出现了错误,经过检查才发现,还有0,1要加单引号等等,总的来说本次题目讲解收入还是很大的。

#include <iostream>
#include<stdio.h>
using namespace std; //将二进制数扩展为二进位
int ChangeBinary(int a[],int b[],int i)
{       int p=1;    while(i){      if(!a[i]){      //"0"表示为0             b[p++]=0;        }       else{        //"1"表示为10           b[p++]=1;            b[p++]=0;        }       i--;}                //","表示为110  b[p++]=1;    b[p++]=1;    b[p++]=0;    return p;}  void Instruct(int b[],int p){int flag=0,m,y;    for(m=0;1;m++){ if(flag==0&&b[m]==0){flag=0;          b[m]=0;     }   else if(flag==0&&b[m]==1){  flag=1;           b[m]=0; }
else if(flag==1&&b[m]==0){  flag=0;    b[m]=1;    }   else if(flag==1&&b[m]==1){         flag=10;           b[m]=0; }       else if(flag==10&&b[m]==0){ flag=11;        b[m]=1;
}else if(flag==11&&b[m]==0)
{   flag=0;    b[m]=1;          for(y=0;y<p+2;y++){  cout<<b[y];      }         cout<<endl;         break;
}       for(y=0;y<p+2;y++){   cout<<b[y];      }       cout<<endl;
}
} int main(){int a[100];    int b[100]={0};    int n,k,p,j=0,temp=0; cout<<"请输入一个十进制的数:"; cin>>n;       //将十进制转化为二进制    int i=-1;  while(n){   i++;   a[i]=n%2;   n=n/2;   }   cout<<"转化成扩展的二进位编码为:"<<endl;     //转化成扩展的二进位编码    p=ChangeBinary(a,b,i);    Instruct(b,p);    return 0;
}

##模拟图灵机 XN*2的运算相关推荐

  1. 模拟图灵机XN乘2的过程

    一.问题描述 JAVA实现模拟图灵机实现自然数乘2的过程. 二.算法构造 编码规则: 0→0: 1→10: , →110; 处理方法: 内态为0,输入为0→内态为0,输出为0,右移: 内态为0,输入为 ...

  2. java实现图灵机XN*2并输出中间过程

    java实现图灵机XN2并输出中间过程 题目: 对XN2图灵机进行模拟,任意给定的十进制数a,转换为收缩扩展二进制的编码,再编程模拟此Turing机的运行过程,要求输出从开始运行起的每一步骤的结果. ...

  3. (C++)模拟图灵机-简单的UN+1和UN*2

    问题描述 对于任意给定的一台Turing机和任意给定的字符串w ( w不含空格),编程模拟此Turing机的运行过程,要求输出从开始运行起的每一步骤的结果.(本文模拟的是UN+1和UN*2的图灵机) ...

  4. 计算机能模拟图灵机吗,关于计算机科学:图灵机与冯诺依曼机器

    背景 Von-Neumann架构描述了存储程序计算机,其中指令和数据存储在存储器中,并且机器通过改变其内部状态来工作,即指令对一些数据进行操作并修改数据.因此,系统中存在状态. 图灵机架构通过操纵磁带 ...

  5. 位运算模拟乘法,模指数运算

    1. 整数乘法(位运算) 使用位运算模拟乘法,其遵照以下的数学原理,即: ab=a(b020+b121+⋅⋅⋅+bn−12n−1)=a(b020)+a(b121)+⋅⋅⋅+a(bn−12n−1)ab= ...

  6. python中float与eval式一样的吗_用Python最原始的函数模拟eval函数的浮点数运算功能...

    前几天看一个网友提问,如何计算'1+1'这种字符串的值,不能用eval函数. 我仿佛记得以前新手时,对这个问题完全不知道如何下手. 我觉得处理括号实在是太复杂了,多层嵌套括号怎么解析呢?一些多余的括号 ...

  7. NOIP模拟测试22「位运算」

    范围n-----$100000$   m $30$ 输出方案 这是一个很好的$dp$题 首先我们应该看出来一条性质只要你最后有方案达到$n$个$1$,那么你可以达到任何`一种$n$个$1$的情况 例如 ...

  8. java 模拟 减法 进位_位运算实现加减乘除四则运算(Java)

    [本文版权归微信公众号"代码艺术"(ID:onblog)所有,若是转载请务必保留本段原创声明,违者必究.若是文章有不足之处,欢迎关注微信公众号私信与我进行交流!] 本文是继< ...

  9. CodeForces #379(734A|734B|734C|734D|734E|734F)|二分查找|模拟|树的半径|位运算

    734A: Anton and Danik 题目大意 给定字符串中,D多输出Danik,A多输出Anton,一样多输出Friendship 题解 #include <cstdio> cha ...

最新文章

  1. 深度学习不是万灵药!神经网络3D重建只是图像分类
  2. 15 个必须知道的 Chrome 开发工具技巧
  3. 远程无法连接svn服务器失败_windows vscode 远程连接linux服务器
  4. springmvc 拦截器_Spring MVC拦截器学习
  5. bzoj2245 [SDOI2011]工作安排 费用流
  6. Mysql InnoDB事务
  7. All xxx functions were compiled because no usable IPDB/IOBJ from previous compilation was found.
  8. 文字渐变效果:图层中的mask属性
  9. 【如何在12306网站上购买上中下卧铺火车票呢?】
  10. 图音80系列车载导航/DVD分体机安装DSA
  11. 空间直线与平面的交点
  12. win10打开计算机黑屏怎么办,win10系统重启黑屏怎么办
  13. 高校邦python网课答案_高校邦编程之美——python网课答案公众号
  14. 常识系列:显示屏 分辨率 SD HD FHD 的区别解释
  15. 操作系统磁盘调度算法相关习题
  16. android system image 编译出错,Android framework 编译常见错误
  17. 实现简易的 Vue 响应式
  18. 【无标题】汇编实现从键盘输入并输出
  19. 全面认识Scratch少儿编程
  20. PaddleDetection 快速上手

热门文章

  1. J2EE基础教程(4):struts框架(视频笔记)
  2. 混合策略改进的麻雀搜索算法-附代码
  3. 彩灯循环控制系统 电路与电子技术 课程设计
  4. 锐浪报表(Grid++Report)实现动态图片链接
  5. 华为云 linux系统 ESC服务器 javaweb 环境配置
  6. 大象装企营销:16个月,血亏300万,投资人撤资,公司倒闭
  7. 数据库中候选键的确定
  8. 微软一个罕为人知的无敌命令
  9. hard resetting link----softreset failed (device not ready)----failed command: READ FPDMA QUEUED
  10. linux-物理内存不够,swap交换内存来凑