有限状态机
常说的状态机是有限状态机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