多任务请求有限状态有限机c语言实现

本文介绍了如何使用C语言实现一个确定的有限状态自动机,涉及到的状态包括S1、S2、S3和陷阱状态S_trap,输入符号为c1、c2、c3。文章详细讲解了预备知识,如typedef函数指针、循环链表和互斥锁,并给出了代码实现,包括状态转换、宏定义、结构体设计、跳转和循环队列功能。最后,提供了测试函数以验证状态机的正确性。
摘要由CSDN通过智能技术生成

确定的有限状态自动机

有限自动机作为一种识别装置,能准确的识别正规集。一个确定的有限状态自动机M是一个五元组:

M={ K,Σ,f,S,Z} M = { K , Σ , f , S , Z }

  • K是一个有穷集,它的每一个元素成为一个状态。
  • Σ Σ 是一个有穷字母表,它的每个元素称为一个输入符号,所以也可以称 Σ Σ 为输入符号表。
  • f是转换函数,是 K×Σ
#include int main() { int state_key = 1; //钥匙状态 为1时钥匙区有钥匙,为时钥匙区 无钥匙 int state_hold = 0; // 钥匙持有状态 为1时持有钥匙,为时 未持有钥匙 int state_door = 0; //门状态 0:关闭 1:打开 int state_lock = 1; //上锁状态 1:上锁 0:解锁 int order; // 用于存放用户输入指令 printf("this is a game.\n"); printf ("if you want to OPEN THE DOOR ,input 1\n"); printf ("if you want to CLOSE THE DOOR ,input 2\n"); printf ("if you want to LOCK THE DOOR ,input 3\n"); printf ("if you want to UNLOCK THE DOOR,input 4\n"); // printf ("if you want to LOCK THE DOOR ,input 5\n"); printf("please input the order\n"); while(1) { scanf("%d",&order); // if(order!=(1||2||3||4)) // { // printf("worng input ,please input again.\n"); // continue; // } switch(order) { case 1 : if(state_door==1) { printf("the door has been opened before\n"); break; } if(state_lock==1) { printf("the door has been lock\n"); break; } state_door=1; break; case 2: if(state_door==0) { printf("the door has been closed before\n"); break; } if(state_lock==1) { printf("the door has been lock\n"); break; } state_door=0; break; case 3: if(state_door==1) { printf("the door has been opened before\n"); break; } if(state_lock==1) { printf("the door has been lock\n"); break; } state_lock=1; break ; case 4: if(state_door==1) { printf("the door has been opened before\n"); break; } if(state_lock==0) { printf("the door has not been lock\n"); break; } state_lock=0; break ; } } }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值