用代码实现图灵机XN*2

一,实验题目
用代码实现图灵机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。

二.题目分析 用字符串数组进行扩展二进制的输入,用flag来存放内态,用多个if…else…语句来判断上边这些指令,符合那个条件就执行哪一个指令,输出每改变一次它的结果。

#include<iostream>
using namespace std;
int main()
{
 char arr[20]; //用字符串数组存放拓展二进位
 int i,flag=0;  //内态变量flag
 cout<<"请输入一个二进制数的拓展二进位:";
 cin>>arr;
 for(i=0;i<=20;i++) 
 { 
        /*if((a[i]!='0')&&(a[i]!='1'))//输入数据正确性判断
  {
  cout<<"输入数据错误!"<<endl;
  exit(0);
  }*/
  if(flag==0&&arr[i]==0) //00->00R
  {
       flag=0;
       arr[i]='0';
                cout<<arr<<endl;
  }
   else if(flag==0&&arr[i]=='1') //0 1->1 0R
  {
    arr[i]='0';
    flag=1;
                cout<<arr<<endl;
  }
     else if(flag==1&&arr[i]=='0') //1 0->0 1R
  {
    arr[i]='1';
    flag=0;
                cout<<arr<<endl;
  }
   else if(flag==1&&arr[i]=='1') //1 1->10 0R
  {
    arr[i]='0';
    flag=10;
                cout<<arr<<endl;
  }
 
   else if(flag==10&&arr[i]=='0') //10 0R->11 1R
  {
    arr[i]='1';
                flag=11;
                cout<<arr<<endl;
  }
  else if(flag==11&&arr[i]=='0') //11 0R->0 1 STOP
  {
      arr[i]='1';
            flag=0;
               cout<<arr<<endl;
  } 
 }
 cout<<"转换后的字符串为:"<<arr<<endl;
}

三.经验归纳
第一个、在想把转化二进制存到字符串,再把字符串转化为字符串数组方便改变二进制的序列,就知道了将字符串转化为字符串数组的函数split() 方法用于把一个字串分割成字符串数组。“hello”.split(“”) //可返回【“h”,”e”,”l”,”l”,”0”】。但还是因为自己能力的问题没有实现输入一个整数用程序输出扩展二进制,还有输出结果时的缩进,但也在网上查阅了很多知识,以后有能力还可以完善这个程序。
第二个就是更了解字符串数组的应用,在写if循环的时候比如if(flag1&&arr[i]‘1’) 因为没有写字符串的单引号就出现了很多问题。在写程序之前还觉得不是很难,但在编程的时候就出现了各种不懂得问题,不会转换成编程语言,写一句就不知道下一句该怎么写,这学期才开始自己编程,还是欠缺编程经验。
第三个在用字符串数组之前还尝试用整型数组,再输入一个数字的时候还要敲空格比较麻烦,所以转换了一种格式,比较方便。
四.测试调试截图
1.运行结果截图,输入3的扩展二进制
输出的结果为6的扩展二进制,符合题目要求
用代码实现图灵机XN*2
出现的问题
出现有乱码现象

用代码实现图灵机XN*2
进行调试
用代码实现图灵机XN*2
用代码实现图灵机XN*2