形式语言与自动机确定的有穷状态自动机..docx

形式语言与自动机确定的有穷状态自动机..docx

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
形式语言与自动机确定的有穷状态自动机.

设计题目构造一个确定有穷状态自动机DFA,它接受的语言为{x|x∈{0,1}*,且当把x看成二进制数时,x模2与0同余}。运行环境硬件:Haier A60 Notebook,Celeron M 1.86GHz\512MB\250GB软件:Windows xp professional 5.1,visual C++ 6.0算法设计的思想输入一段0、1字符语言,把此语言看成是一个二进制数x,即求x要能否被2整除。当二进制数x的位数向右不断增加时,它的值(换算成十进制)的增加很有规律:x0的值等于2x,x1的值等于2x+1,据此规律,可实现满足要求的算法。算法的流程图简单的程序流程图:算法分析设计在visual C++ 6.0中, 新建一个win32 Console Application的应用程序,工程名为ModTwoThree,新建类ModTwo,用于编写模二运算的算法,在其构造函数ModTwo()中,实现具体功能。定义两个字符数组ch[100]和a[100],其中ch[100]用于存储从屏幕控制台输入的语言,即0、1字符串;a[100]用于存储程序当前正在处理的字符串。输入语言后首先利用一个for循环语句判断ch中是否存在非0、1安符,若存在,则显示语言不满足自动机识别条件,无法执行算法。若不存在非0、1安符,判断接受字符,若为0,二进制对应的十进制数为n=2*n+0,同时执行a[i]=ch[i],使安符数组a始终表示当前处理的二进制字符串,执行if(n%2==0),判断结果,同时输出a;若接受字符为1,二进制对应的十进制数为n=2*n+0,同时执行a[i]=ch[i],使安符数组a始终表示当前处理的二进制字符串,执行n%2==0,判断结果,同时输出a。同时发现,此程序能够很好的移植用于二进制模三、模四、模五等二进制除模运算,只需将判断语句if(n%2==0)改为if(n%3==0)等即可。源代码:进制模二运算:ModTwo::ModTwo(){int i=0,j=0,n=0;char ch[100],a[100]=,c;cout请输入0 1字符串的语言:endl;do{scanf(%c,ch[i]);c=ch[i];i++;}while(c!=\n);ch[i]=\0;cout你所输入的语言:endl;i=0;while(ch[i]!=\0){printf(%c,ch[i]);i++;}j=i;for(i=0;ij-1;i++){if(ch[i]!=0ch[i]!=1){cout输入语言中包括非0、1字符,无法被自动机所接受!!!endl;break;}else if(ch[i]==0)n=2*n+0;else if(ch[i]==1)n=2*n+1;a[i]=ch[i];if(n%2==0)couta能被2整除!endl;else if(n%2==1)couta不能被2整除!endl;}}二进制模三运算:ModThree::ModThree(){int i=0,j=0,n=0;char ch[100],a[100]=,c;cout请输入0 1字符串的语言:endl;do{scanf(%c,ch[i]);c=ch[i];i++;}while(c!=\n);ch[i]=\0;cout你所输入的语言:endl;i=0;while(ch[i]!=\0){printf(%c,ch[i]);i++;}j=i;for(i=0;ij-1;i++){if(ch[i]!=0ch[i]!=1){cout输入语言中包括非0、1字符,无法被自动机所接受!!!endl;break;}else if(ch[i]==0)n=2*n+0;else if(ch[i]==1)n=2*n+1;a[i]=ch[i];if(n%3==0)couta能被3整除!endl;else if(n%3==1)couta不能被3整除!endl;else if(n%3==2)couta不能被3整除!endl;}}收获及体会?运行结果如下:

您可能关注的文档

文档评论(0)

s4as2gs2cI + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档