zoukankan      html  css  js  c++  java
  • 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;  
    }  
  • 相关阅读:
    枚举和字符串之间的转换 [转帖]
    escape,encodeURI,encodeURIComponent函数比较[转帖]
    .net中的Provider模式 [转帖]
    ogg转到mp3
    四季养生(樊正伦教授)
    JavaScript高阶之路
    Python初识
    理解error和exception之间的区别(转)
    一些有用的话
    《爱在雨季》片尾曲
  • 原文地址:https://www.cnblogs.com/wangjunjie123/p/5017403.html
Copyright © 2011-2022 走看看