首页 > 其他分享 >状态机

状态机

时间:2022-10-22 17:36:29浏览次数:60  
标签:状态 curState 状态机 STATE1 stateCode printf

有限状态机

常说的状态机是有限状态机FSM(Finite State Machine)。FSM指的是有有限个状态(一般是一个状态变量的值),这个机器同时能够从外部接收信号和信息输入,机器在接收到外部输入的信号后会综合考虑当前自己的状态和用户输入的信息,然后机器做出动作:跳转到另一个状态。状态机是有限状态自动机的简称,是现实事物运行规则抽象而成的一个数学模型。

四大概念

第一个是 State ,状态。一个状态机至少要包含两个状态。 第二个是 Event ,事件。事件就是执行某个操作的触发条件或者口令。 第三个是 Action ,动作。事件发生以后要执行动作。例如事件是“按开门按钮”,动作是“开门”。编程的时候,一个 Action一般就对应一个函数。 第四个是 Transition ,变换。也就是从一个状态变化为另一个状态。例如“开门过程”就是一个变换。

两种状态机类型:

(1)Moore型状态机特点是:输出只与当前状态有关(与输入信号无关)。相对简单,考虑状态机的下一个状态时只需要考虑它的当前状态就行了。

(2)Mealy型状态机的特点是:输出不只和当前状态有关,还与输入信号有关。状态机接收到一个输入信号需要跳转到下一个状态时,状态机综合考虑2个条件(当前状态、输入值)后才决定跳转到哪个状态。

简单示例

#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;

typedef enum{
	STATE1=0, STATE2, STATE3
}STATE_CODE;

int main(){
	int curState = 0;
	STATE_CODE stateCode = STATE1;
	printf("state1\n");
	while (true){
		scanf("%d", &curState);
		switch(stateCode){
			case STATE1:
				if (curState == 1){
					stateCode = STATE2;
					printf("state2\n");
				}else{
					stateCode = STATE1;
					printf("state1\n");
				}
				break;
			case STATE2:
				if (curState == 2){
					stateCode = STATE3;
					printf("state3\n");
				}else{
					stateCode = STATE1;
					printf("state1\n");
				}
				break;
			case STATE3:
				if (curState == 3){
					printf("success\n");
					return 0;
				}else{
					stateCode = STATE1;
					printf("state1\n");
				}
		}
	}	
	return 0;
}

标签:状态,curState,状态机,STATE1,stateCode,printf
From: https://blog.51cto.com/u_15457669/5786016

相关文章

  • [答疑]识别员工身份的类图和状态机图
    Alan2021-6-2920:11在这个问题卡住了,@UMLChina潘加宇 和各位同学帮忙看下左耳东2下面写3a?Alan是2bJeff@Alan 如果是用例的话,我建议将2a和2b作为扩展条件来处理,写在主流......
  • QFramework v1.0 使用指南 工具篇:10. FSMKit 状态机
    QFramework内置了一个简易的状态机,基本使用如下:链式usingUnityEngine;namespaceQFramework.Example{publicclassIStateBasicUsageExample:MonoBehaviour......
  • PCIe物理层LTSSM状态机解析
    在PCIe链路可以正常工作之前,需要对PCIe链路进行链路训练,在这个过程中,就会用LTSSM状态机。LTSSM全称是LinkTrainingandStatusStateMachine。这个状态机在哪里呢?它就在P......
  • 开源状态机代码生成 StateSmith 支持C/C++
     StateSmithStateSmithisacrossplatform,free/opensourcetoolforgeneratingstatemachines.Thegeneratedcodeishumanreadable,haszerodependencies......
  • 状态机:给定规则下分类讨论——红黑树(+队列实验-银行模拟)
    状态机:分类讨论,为了递归与美观,把重复的去掉dueto二叉树不保证平衡,herecomesRed-Blacktree——每条路黑高相同,lmax<2lmin类似还有AVLT(1.44lgn,但维护代价大)红黑树......
  • [答疑]EA帮助里的登录状态机图
    七日晴2020-1-1311:26潘老师好,感觉现在做的app的登录功能很混乱,可以用但看代码里的逻辑没有条理,想用状态图画清楚登陆的逻辑,EA帮助里有登录例子,还有登录次数限制条件。您......
  • [答疑]添加新闻的状态机图很诡异
    ​​软件方法(下)分析和设计第8章连载[20210723更新]>>​​Regina(41***58)12:20:44Regina(41***58)12:21:00还有这个状态机图也很诡异呀能是这样吗PYE<pye***q.com>12:20......
  • UML _ 状态机图
    概述对现实世界中事物的观察现实世界中的各种事物通常都有一个生命周期。在事物被创建后,经过一定阶段的变迁,它可能就结束或消亡了。例如:生物会经历出生、成长、衰老和......
  • 数字IC手撕代码-序列检测(状态机写法)
    大家好我是酸菜鱼,这个系列着重讲解数字ic或FPGA实习面试及秋招面试的高频手撕代码题 具体内容涉及:        一说到序列检测,你脑子里要立马跳出两种解法,一种是状......
  • dp----状态机模型
    《需求引出》《情况一:》在一般的dp问题中,我们的当前项都是可以由前一项推出的,但是在一些情况下我们要用到前前项的情况,这个时候可以将这个情况当做一个状态表示出来,进......