##模拟图灵机 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. 保持dropdownlist选中值
  2. Linux 里有/lib和/usr/lib,这两个目录下的库文件有什么区别吗?如果没区别为什么又要分开放呢...
  3. Linux的默认给home分配多少,Linux 分配/home的磁盘空间给根目录
  4. 被墙怎么搭建安卓开发环境
  5. 【每周CV论文推荐】 初学目标检测必须要读的文章
  6. 修改linux下全局数据库名,linux/unix下修改oracle数据库实例名的方法
  7. .NET Core容器化@Docker
  8. mysql 云无忧ps教程_华为云数据库MySQL一键开通读写分离,无忧应对企业业务高峰情景...
  9. Spring事务配置实例
  10. [转] 在 Mac OS X 下编译 Objective-C 运行时
  11. 【前端 · 面试 】HTTP 总结(二)—— HTTP 消息
  12. SLAM_三维点优化时为什么使用逆深度误差而不是深度误差?
  13. cut最后几位 shell_shell中字符串截取命令:cut,printf,awk,sed
  14. abaqus 帮助文档
  15. 【第七周】项目6-停车场模拟
  16. F5 GTM DNS 知识点和实验 6 -智能DNS算法
  17. oracle虚拟用户是什么意思,配置vsftp基于虚拟用户认证
  18. arduino继电器控制风扇_Arduino基础入门篇24—继电器控制
  19. 朝花夕拾 - 2020 1024
  20. ristretto255 point压缩和解压缩算法(1)——affine坐标系下

热门文章

  1. 如何理解PoW工作量证明?
  2. 史上最全图文精美排版技巧
  3. IDEA支持VUE的做法
  4. python与其他的数据分析有什么区别_学好python和数据分析有什么关系?
  5. 使用高德地图服务获取全部行政区划与各个省市的地理坐标
  6. r 字符串转化为数值_【R语言】tidyverse之一:读写数据
  7. pcie gen3 bios设置_公版RX5700刷RX 5700XT 显卡BIOS 的教程
  8. 星环科技自研技术,加速大数据从持久化、统一化、资产化、业务化到生态化
  9. 谷歌浏览器手动同步设置
  10. 强制IE使用兼容模式