模拟图灵机XN*2

模拟图灵机XN*2

题目

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

1. 算法分析

首先要将输入的数先转化成二进制(用库函数可以实现),再将二进制数转换成磁带上二进制扩展码(需要自己写一个函数)。
第二要清楚图灵机XN*2的指令集,以及如何转换
0 0→0 0R
0 1→1 0R
1 0→0 1R
1 1→10 0R
10 0→11 1R
11 0→0 1STOP
怎么实现转换是关键!!对得到的编码,按图灵机指令集进行编码(这里应该会与循环嵌套和条件判断语句去控制)在编码过程中,对于每一种指令的执行之后,输出相应的执行指令,内态以及相应的输入字符的改变情况,再递归,继续下一步的指令操作直至停止STOP
最后,应该将得到的编码先转换成二进制再转换成十进制,输出得到结果,得到的结果应该是输入数的2倍。

2. 概要设计

在这里插入图片描述

3.代码展示

#include <iostream> 
#include<string>
#include<stdlib.h> 
#include<cmath>
using namespace std;
string s;  //输入的数据对应的字符串 
int i = 0; //字符串计数变量 

//判断是否为数字对应的字符串
int isnum(string s) 
{
   
	double b=atof(s.c_str());
	if(b<=0||(b!=(int)b)) 
	{
   
		cout<<"输入的数不是一个正整数!"<<endl;
		cout<<endl; 
		return 0;
	}
	else
		return 1;


}
//转换二进制为 磁带上的编码 
string turnTuLing(string s) //0-0;1-10; ,-110
{
   
	string a;
	for(int i=0;i<s.length();i++) 
	{
   
		if (s[i] == '0')
		a+= '0';
		else if(s[i] == '1') //1->10
		{
   
			a+='1';
			a+='0';
		}
		else if(s[i] == ',')//,->110
		{
   
			a+='1';
			a+='1';
			a+='0'; 
		}
		
	}
	return a;
} 

//编码转回二进制 
string turn(string s) 
{
   
	string b;//存转回的值
	int i = 0;
	while(i<s.length()) 
	{
   
		if(s[i]=='0')
		{
   
			i++;
			b+='0';
		}
		else//遇1要判断 
		{
   
			if(s[i+1]=='0') 
			{
   
				i+=
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值