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语言,对一个问题进行自动机 建模的更多相关文章

  1. (转)如何学好C语言,一个成功人士的心得!

    zidier111发表于 2013-1-26 08:59:05   今 天,我能够自称是一个混IT的人,并能以此谋生,将来大家能一次谋生,都要感谢两个人:克劳德.香农和约翰.冯.诺依曼,是他们发现了所 ...

  2. 怎样学好C语言,一个成功人士的心得!

    今天,我能够自称是一个混IT的人,并能以此谋生,将来大家能一次谋生,都要感谢两个人:克劳德.香农和约翰.冯.诺依曼,是他们发现了全部的数字化信息,不论是一段程序,一封email,一部电影都是用一连串的 ...

  3. C语言中一个语句太长用什么换行?

     C语言中一个语句太长用什么换行? 5 C语言中一个语句太长用什么换行?比如我有一个printf语句很长很长,问了美观,我不想写在这一行了,要换到下一行,是不是在这行结尾的时候,要用个什么标识来表 ...

  4. 使用Java语言编写一个五子棋UI界面并实现网络对战功能(非局域网)

    使用Java语言编写一个五子棋UI界面并实现网络对战功能(非局域网) 一,前期准备 1,Java IDE(Eclipse)与JDK的安装与配置jdk-15.0.1-免配置路径版提取码:earu免安装版 ...

  5. 用C语言写一个“事件”的模拟程序

    源:用C语言写一个“事件”的模拟程序 Example.c //定义一个函数指针 func int (*func) (void); //调用该函数相当于触发了事件. //该事件触发后,会检查函数指针fu ...

  6. 用C语言编写一个简单的词法分析程序

    问题描述: 用C或C++语言编写一个简单的词法分析程序,扫描C语言小子集的源程序,根据给定的词法规则,识别单词,填写相应的表.如果产生词法错误,则显示错误信息.位置,并试图从错误中恢复.简单的恢复方法 ...

  7. 用Go语言实现一个简单的聊天机器人

    一.介绍 目的:使用Go语言写一个简单的聊天机器人,复习整合Go语言的语法和基础知识. 软件环境:Go1.9,Goland 2018.1.5. 二.回顾 Go语言基本构成要素:标识符.关键字.字面量. ...

  8. C语言学习一个月后感想

    C语言学习一个月后感想 感谢李晓东老板及计算机工程师联盟的学长学姐和某神秘同级同学的辛勤指导,感谢宋雨田的督促和陪伴. 初识C的1..体会 我本以为凭借瓜皮思维和花里胡哨操作可以让我熟练地学习语言,现 ...

  9. 使用C语言实现一个虚拟机

    使用C语言实现一个虚拟机 2015-6-22 21:32| 发布者: joejoe0332| 查看: 2891| 评论: 0|原作者: leoxu, Serval, 社会主义好, lostTemple ...

随机推荐

  1. EPANET中读取INPUT文件的函数文件——INPUT3.C

    /* ********************************************************************** INPUT3.C -- Input data par ...

  2. 使用fat-jar打包多个java工程为可执行文件

    对于一个从C++转向Java的程序员来说,制作java的可执行文件,也算是比较棘手的问题.项目是前几个同事留下来的,几个必备的库文件和制作可执行文件的工具居然都是加密未解封的:不知道是不是因为公司和前 ...

  3. HT图形组件设计之道(一)

    HT for Web简称HT提供了涵盖通用组件.2D拓扑图形组件以及3D引擎的一站式解决方案,正如Hightopo官网所表达的我们希望提供:Everything you need to create ...

  4. 新手学习Cocoapods教程

    CocoaPods简介 当你开发iOS应用时,会经常使用到很多第三方开源类库,比如AFNetWorking等等.手动去下载所需类库十分麻烦.另外一种常见情况是,你项目中用到的类库有更新,你必须得重新下 ...

  5. BLOCK的应用

    相比看一下枯燥乏味的对于block的讲解,为什么不从大神的代码中领路它的使用方法呢,了解一下大神是如何使用block的呢,见识它的强大.https://github.com/zwaldowski/Bl ...

  6. Qt Style Sheet实践(一):按钮及关联菜单

    导读 正如web前端开发中CSS(Cascade Style Sheet)的作用一样,Qt开发中也可以使用修改版的QSS将逻辑业务和用户界面进行隔离.这样,美工设计人员和逻辑实现者可以各司其职而不受干 ...

  7. JS中 toString() & valueOf()

    数据的转换 所有对象继承了两个转换方法: 第一个是toString(),它的作用是返回一个反映这个对象的字符串 第二个是valueOf(),它的作用是返回它相应的原始值 toString() toSt ...

  8. Winform开发框架之权限管理系统功能介绍

    权限管理系统的重要特性总结: 1) 高度集成的权限系统.独立模块,能快速整合使用.2) 符合权限的国际通用标准,基于RBAC(基于角色的访问控制)的角色权限控制.3) 多数据库架构支持,内置支持Sql ...

  9. C#基础--之数据类型

    C#基础--之数据类型 摘自:http://www.cnblogs.com/tonney/archive/2011/03/18/1987577.html 在第一章我们了解了C#的输入.输出语句后,我这 ...

  10. c#对Aspose.Word替换书签内容的简单封装

    辅助类1  json和datatable互转:   using System; using System.Collections.Generic; using System.Linq; using S ...