首页 > 其他分享 >有限状态机

有限状态机

时间:2023-06-05 16:35:57浏览次数:39  
标签:case break 状态 有限 状态机 Than 输入


有限状态机 在计算机中是一份可以运动的代码。

这份代码有 有限个状态,里面的变量只能有 有限个状态,比如:

// 定义枚举类型,共 9 种状态
typedef enum{
	S1,	
	S2,		
	S3,		
	S4,		
	S5,		
	S6,
	S7,
	S8,
	S9,
}STATE;

STATE cur_s = S1;
// 枚举类型的变量 cur_s 就只有 有限个状态(9个)。

另外有限状态机能从外部接受信号和信息输入,接受后会综合考虑当前自己的状态和用户输入的信息跳转到另一个状态。

 

有限状态机分为 Moore 和 Mealy 型。

Moore:输出只与当前状态有关(与输入无关)。

Mealy:输出结合了当前状态、输入信号,状态机接收到一个输入信号需要跳转为下一个状态,下一个状态具体是 哪个状态 ,取决于 当前状态 和 输入值。

常用的有限状态机考虑的:当前状态、外部输入、下一个状态,也就是 Mealy 型。

用 C 实现一个简单的有限状态机,最好的取材是地址。

XX省 XX市 XX区 XX街道 XX号

如果在 输入省前 先输入 市 ,状态机就归零,在输入街道前 输入号也是如此。

简单起见,重在理解。

把上面的地址 换为 一串数字,要按照顺序输入 41739364 才能到达状态 S9,结束程序。

看一下代码吧,思想实现大概就是这样。

#include<stdio.h>
// 俩个宏定义,想少写点代码,为了可读性您可以补上。
#define S(n) { cur_s = S##n, print(cur_s); }    // 如果输入匹配,状态加一
#define Than else{ cur_s = S1; }                // 否则,状态回到 S1

typedef enum{
	S1,	
	S2,		
	S3,		
	S4,		
	S5,		
	S6,
	S7,
	S8,
	S9,
}STATE;

void print(STATE str)                            // 打印函数,提示也可以不用
{
 	if(  str == S1 )
	    puts("等级归零,重新输入");
	 else 
	    puts("等级+1");
}

int main(int argc, const char *argv[])
{
	puts("input num: ");
	STATE cur_s = S1;                        // 起始状态
	int n;
	while(1){	
		scanf("%d", &n);
		
		switch(cur_s)                    // 有限状态机的代码实现一般采用 switch 语句 
		{
			case S1:    if( n == 4 ) S(2) Than break;
			case S2:    if( n == 1 ) S(3) Than break;
			case S3:    if( n == 7 ) S(4) Than break;
			case S4:    if( n == 3 ) S(5) Than break;
			case S5:    if( n == 9 ) S(6) Than break;
			case S6:    if( n == 3 ) S(7) Than break;
			case S7:    if( n == 6 ) S(8) Than break;
			case S8:    if( n == 4 ) S(9) Than break;
			default:	S(0)
		}
		
		
	}

	return 0;
}

如果只使用 第一个宏 S(n) ,输入数字不对应时,还可以在原状态一直输入下一个状态;如果俩个宏一起使用,那么中途只要有一个数字匹配不上,状态机的状态初始化,需要又从头开始输入。

标签:case,break,状态,有限,状态机,Than,输入
From: https://blog.51cto.com/u_13937572/6417550

相关文章

  • abaqus有限元仿真常见问题(一):数值仿真在产品研发中的作用
    在当今欧美发达国家的工业企业中,有限元分析已成为产品研发过程中-个必不可少的重要环节。CAE工程师在校核设计方案、保证产品质量、改进产品设计、降低产品成本提高产品强度和寿命等方面肩负重要的职责。对于一些复杂的关键部件,如果不经CAE工程师分析确认设计方案,就不能投产,如果......
  • 跨境电商新锐:武汉星起航电子商务有限公司助力行业蓬勃发展
    近年来,跨境电商行业得到国家的大力扶持,迅速崛起成为外贸新的热门领域。在这个激烈竞争的市场中,武汉星起航顺应政策发展的机遇,于2020年成立。凭借着专业运营团队多年的经验,该公司成功打造了全新的五对一运营教学体系,构建跨境电商亚马逊一站式孵化平台。其为合作伙伴提供专业教学和多......
  • 搞事我们是认真的!TDengine 周边大礼包走起,数量有限先到先得
    没错~我们就是要“搞事”啦揭晓谜底前TDengine周边先来露个面不知不觉间TDengine已经和大家共同走过六年时间了从单机版开源到集群版开源从零到两万一的Star增长从寥寥可数的下载量到超25万的用户实例数从1.0到2.0到3.0的版本迭代......在这六年时间里T......
  • 远大生命有限公司存在漏洞
    网址:http://www.nkbp.com/about.php?id=1漏洞描述:远大生命科学(武汉)有限公司(原名“武汉大安制药有限公司”)是一家集药品研发、生产与销售为一体的高科技医药综合企业,位于武汉市东西湖区金银湖生态园,占地面积八万平方米。公司隶属于中国远大集团,是集团生物板块龙头单位--远大生命科......
  • 云南中茶茶业有限公司与大连联中茶业有限公司成功签订合作协议
        2023年5月18日,央企中粮旗下云南中茶茶业有限公司、中茶普洱茶叶有限公司、中茶(勐海)茶业有限公司与大连联中茶业有限公司在大连新天百茶城举办了《云南中茶茶业有限公司特殊渠道经销合同》的签约仪式。云南中茶茶业有限公司东北大区负责人马洪浩、大连联中茶业有限公司董......
  • Spring之状态机讲解
    目录1状态机1.1什么是状态1.2四大概念1.3状态机1.4springstatemachine2示例Demo2.1订单状态图2.2建表2.3依赖和配置2.3.1pom.xml2.3.2application.yml2.4状态机配置2.4.1定义状态机状态和事件2.4.2定义状态机规则2.4.3配置持久化2.4.3.1持久化到内存2.4.3.2持久......
  • Spring StateMachine状态机总结
    参考文档:https://blog.51cto.com/u_6346066/5271543https://mp.weixin.qq.com/s?__biz=MzI2MTIzMzY3Mw==&mid=2247540203&idx=1&sn=0855be65db7b01efab77a40b5d0ecc97&chksm=ea5f908ddd28199bb73ebcbcf44970039a574ba4b102e5c4518dad6a96237cbdafab7e4f5938&......
  • 项目终于用上了 Spring 状态机,非常优雅!
    来源:https://www.duidaima.com/Group/Topic/JAVA/119421、什么是状态机1.1什么是状态先来解释什么是“状态”(State)。现实事物是有不同状态的,例如一个自动门,就有open和closed两种状态。我们通常所说的状态机是有限状态机,也就是被描述的事物的状态的数量是有限个,例如自动......
  • 杭银消费金融有限公司招聘信息
    前言「CV技术指南」将持续带来人工智能相关在招职位信息,欢迎正在找工作与看新机会的朋友关注,也欢迎企业伙伴与我们联系合作,免费发布招聘信息,想给公司内推的朋友也可以联系。欢迎关注公众号CV技术指南,专注于计算机视觉的技术总结、最新技术跟踪、经典论文解读、CV招聘信息。CV......
  • 基于状态机方法的按键消抖模块FPGA实现,包括testbench
    1.算法仿真效果vivado2019.2仿真结果如下:   系统RTL图:   2.算法涉及理论知识概要        状态机,FSM(FiniteStateMachine),也称为同步有限状态机从。指的是在同步电路系统中使用的,跟随同步时钟变化的,状态数量有限的状态机,简称状态机。 状态机分类 ......