• 1203 有限自动机与构造


    #include<stdio.h>  
    #include<unistd.h>  
    #include<stdlib.h>  
    typedef int state;  
    typedef int condition;  
      
    #define STATENUM 4  
    #define STATE1 0  
    #define STATE2 1  
    #define STATE3 2  
    #define STATETRAP 3  
      
    #define CONDITIONS 2  
    #define CONDITION1 0  
    #define CONDITION2 1  
      
    typedef void (* actiontype)(state mystate,condition mycondition);  
    typedef struct{  
      state next;  
      actiontype action;  
    }trasition, *ptrasition;  
      
    void action1(state mystate,condition myconditon);  
    void action2(state mystate,condition myconditon);  
    void action3(state mystate,condition myconditon);  
    void actiontrap(state mystate,condition myconditon);  
    trasition t1={  
      STATE2,action1  
    };  
    trasition t2={  
      STATE3,action2  
    };  
    trasition t3={  
      STATE2,action3  
    };  
    trasition tt={  
      STATETRAP,actiontrap  
    };  
      
    void action1(state mystate,condition myconditon){  
      printf("action1 one triggered ");  
    }  
    void action2(state mystate,condition myconditon){  
      printf("action2 one triggered ");  
    }  
    void action3(state mystate,condition myconditon){  
      printf("action3 one triggered ");  
    }  
    void actiontrap(state mystate,condition myconditon){  
      printf("actiontrap one triggered ");  
    }  
      
    ptrasition transition_table[STATENUM][CONDITIONS] = {  
    /*      c1,  c2*/  
    /* s1 */&t1, &tt,  
    /* s2 */&tt, &t2,  
    /* s3 */&t3, &tt,  
    /* st */&tt, &tt,  
    };  
    typedef struct  
    {  
        state current;  
    } StateMachine, * pStateMachine;  
       
    state step(pStateMachine machine, condition mycondition)  
    {  
        ptrasition t = transition_table[machine->current][mycondition];  
        (*(t->action))(machine->current, mycondition);  
        machine->current = t->next;  
        printf("the current state is %d ",t->next );  
        return machine->current;  
    }  
    int main(int argc, char *argv[])  
    {  
      StateMachine mymachine;  
      mymachine.current=STATE1;  
      int mycon;  
      char ch;  
      while(1){  
        scanf("%d",&mycon);   
        step(&mymachine,mycon);  
      }  
      return 0;  
    }  
  • 相关阅读:
    softice 在winice中的安装 zt
    普通版和优秀版简历的20项对比
    今天又投了几家。。等啊。。。
    乱写
    反攻击技术综合分析报告
    今天投简历的公司
    #pragma 预处理指令详解
    黑客入侵无线网络常用手段
    ADODB.Stream漏洞
    利用TCP/IP的堆栈指纹的方法
  • 原文地址:https://www.cnblogs.com/wangjunjie123/p/5017403.html
Copyright © 2020-2023  润新知