采用 PAT工具及CSP语言,对一个问题进行自动机 建模
pat是新加坡国立开发的工具,需要的去官网下http://www.comp.nus.edu.sg/~pat/
,学了一天,是个不错的自动机验证工具,感觉还不错啊。
验证一个数是否为斐波那契数且为质数
方法
先验证是否为斐波那契数,然后再判断质数
代码
/*验证是否为 斐波那契数且是质数*/ #define goal (b==13 && f==1); //是斐波那契数且是质数 #define no1goal(b==21 && f==1);// 是斐波那契数不是质素 #define no2goal(b==22 && f==1);// 不是斐波那契数 var a = ; var b = ; var t = ; var s = ; var f = ; FBNQ() = [ b> ] fbnq1{t=b;b=a+b;a=t;}->FBNQ() [][b>] fbnq2{s = ;}->ZHISHU(); ZHISHU() = if( s*s <= b && b%s== ) { zhishu1{f=;}->FBNQ() } else if(s*s <= b) { zhishu2{s=s+;}->ZHISHU() } else { zhishu3{f=;}->ZHISHU() }; #assert FBNQ() reaches goal; #assert FBNQ() reaches no1goal; #assert FBNQ() reaches no2goal;
验证过程和结果
1、是斐波那契数且是质数
#define goal (b==13 && f==1);
2、 是斐波那契数不是质素
#define no1goal(b==21 && f==1);
3、 不是斐波那契数
#define no2goal(b==22 && f==1);//
总结
验证成功。
PAT工具及CSP语言,对一个问题进行自动机建模,的确是个强大的工具。
还有一个农夫过河的问题,ppt上写的,也很不错:
状态是:
1 农夫过河
– 农夫在河边,狼和羊、羊
和菜不能同时在河边
– 农夫到对岸
• 2农夫带狼过河
– 农夫、狼在河边, 羊和菜
不能同时在河边
– 农夫、狼到对岸
• 3农夫带羊过河
– 农夫、羊在河边
– 农夫、羊到对岸
• 4农夫带菜过河
– 农夫、菜在河边,狼和羊
不能同时在河边
– 农夫、菜到对岸
• 1 农夫回来
– 农夫在对岸,狼和羊、羊和
菜不能同时在对岸
– 农夫回到河边
• 2农夫带狼回来
– 农夫、狼在对岸,羊和菜不
能同时在对岸
– 农夫、狼回到河边
• 3农夫带羊回来
– 农夫、羊在对岸
– 农夫、羊回到河边
• 4农夫带菜回来
– 农夫、菜在对岸,狼和羊不
能同时在对岸
– 农夫、菜回到河边
• /*0表示在河边, 1表示在对岸*/
• var farmer=0;
• var wolf=0;
• var goat=0;
• var carbage=0;
• Cross() =[ farmer==0 && ((! (wolf==0 && goat==0) ) && (! (goat==0 &&
carbage==0))) ] farmer_cross{farmer=1;}->Return()
• [] [ farmer==0 && wolf==0 && (! (goat==0 && carbage ==0)) ]
farmer_wolf_cross{farmer=1;wolf=1;}->Return()
• [] [ farmer==0 && goat==0] farmer_goat_cross{farmer=1;goat=1;}->Return()
• [] [ farmer==0 && carbage==0 && (! (wolf==0 && goat==0)) ]
farmer_carbage_cross{farmer=1;carbage=1;}->Return();
• Return() =[ farmer==1 && ((! (wolf==1 && goat==1)) && (! (goat==1 &&
carbage==1))) ] farmer_return{farmer=0;}->Cross()
• [] [ farmer==1 && wolf==1 && (! (goat==1 && carbage ==1)) ]
farmer_wolf_return{farmer=0;wolf=0;}->Cross()
• [] [ farmer==1 && goat==1] farmer_goat_return{farmer=0;goat=0;}->Cross()
• [] [ farmer==1 && carbage==1 && (! (wolf==1 && g
采用 PAT工具及CSP语言,对一个问题进行自动机 建模的更多相关文章
- (转)如何学好C语言,一个成功人士的心得!
zidier111发表于 2013-1-26 08:59:05 今 天,我能够自称是一个混IT的人,并能以此谋生,将来大家能一次谋生,都要感谢两个人:克劳德.香农和约翰.冯.诺依曼,是他们发现了所 ...
- 怎样学好C语言,一个成功人士的心得!
今天,我能够自称是一个混IT的人,并能以此谋生,将来大家能一次谋生,都要感谢两个人:克劳德.香农和约翰.冯.诺依曼,是他们发现了全部的数字化信息,不论是一段程序,一封email,一部电影都是用一连串的 ...
- C语言中一个语句太长用什么换行?
C语言中一个语句太长用什么换行? 5 C语言中一个语句太长用什么换行?比如我有一个printf语句很长很长,问了美观,我不想写在这一行了,要换到下一行,是不是在这行结尾的时候,要用个什么标识来表 ...
- 使用Java语言编写一个五子棋UI界面并实现网络对战功能(非局域网)
使用Java语言编写一个五子棋UI界面并实现网络对战功能(非局域网) 一,前期准备 1,Java IDE(Eclipse)与JDK的安装与配置jdk-15.0.1-免配置路径版提取码:earu免安装版 ...
- 用C语言写一个“事件”的模拟程序
源:用C语言写一个“事件”的模拟程序 Example.c //定义一个函数指针 func int (*func) (void); //调用该函数相当于触发了事件. //该事件触发后,会检查函数指针fu ...
- 用C语言编写一个简单的词法分析程序
问题描述: 用C或C++语言编写一个简单的词法分析程序,扫描C语言小子集的源程序,根据给定的词法规则,识别单词,填写相应的表.如果产生词法错误,则显示错误信息.位置,并试图从错误中恢复.简单的恢复方法 ...
- 用Go语言实现一个简单的聊天机器人
一.介绍 目的:使用Go语言写一个简单的聊天机器人,复习整合Go语言的语法和基础知识. 软件环境:Go1.9,Goland 2018.1.5. 二.回顾 Go语言基本构成要素:标识符.关键字.字面量. ...
- C语言学习一个月后感想
C语言学习一个月后感想 感谢李晓东老板及计算机工程师联盟的学长学姐和某神秘同级同学的辛勤指导,感谢宋雨田的督促和陪伴. 初识C的1..体会 我本以为凭借瓜皮思维和花里胡哨操作可以让我熟练地学习语言,现 ...
- 使用C语言实现一个虚拟机
使用C语言实现一个虚拟机 2015-6-22 21:32| 发布者: joejoe0332| 查看: 2891| 评论: 0|原作者: leoxu, Serval, 社会主义好, lostTemple ...
随机推荐
- n 后问题
n后问题,解决思路:假设每个皇后占一行(且第i个皇后放在第i - 1 行),依次去尝试下一个皇后该放在该行的哪一列 #include<iostream> #include<cmath ...
- lnmp_auto:自动化安装lnmp环境脚本
朋友找我在一台机器上帮忙安装下discuz.想着搭建过好几次的lnmp了,但是还没有使用过"一键安装"的自动化脚本,去网上有搜索出来,但是运行的时候发现用root运行别人的脚本还是 ...
- [转]AutoResetEvent 与 ManualResetEvent区别
在C#多线程编程中,这两个类几乎是不可或缺的,他们的用法/声明都很类似,那么区别在哪里了? Set方法将信号置为发送状态 Reset方法将信号置为不发送状态 WaitOne等待信号的发送 其实,从名字 ...
- 爆搜 + 模拟 --- codeforces 475C
Problem's Link:http://codeforces.com/problemset/problem/475/Chttp://codeforces.com/problemset/proble ...
- Android中的消息通知(NotificationManager和Notification)
下面来谈谈notification,这个notification一般用在电话,短 信,邮件,闹钟铃声,在手机的状态栏上就会出现一个小图标,提示用户处理这个通知,这时手从上方滑动状态栏就可以展开并处理这 ...
- 批量插入数据 C# SqlBulkCopy使用
转自:http://blog.csdn.net/wangzh300/article/details/7382506 private static void DataTableToSQLServer( ...
- 页面UI注意事项,你在乎吗?
早上打开微信,看到一篇文章,下面就和大家分享一下,该文章属于前端文章系列,希望做后台开发系统的程序员也可以学习一下,只会写代码把功能实现是第一,接下来也要把界面做做好. 现在的界面风格对于手机而言,一 ...
- [moka同学笔记]一、Yii2.0课程笔记(魏曦老师教程)
第一节 第二节 课程内容
- $(document).ready()即$()方法和window.onload方法的比较
以浏览器装载文档为例,我们都知道在页面完毕后,浏览器会通过JavaScript为DOM元素添加事件.在常规的JavaScript代码中,通常使用window.onload方法,而在jQuery中,使用 ...
- DOM LOAD测试笔记
DOM时间:1823ms LOAD时间:4912ms COMP时间:5427ms 1585 4757 5650 1859 3487 3910 1600 4648 5099 1610 4428 4878 ...