#include int f1() { printf("function 1\n"); } int f2() { printf("function 2\n"); } int f3() { printf("function 3\n"); } int f41() { printf("function 4 from state 1\n"); } int f42() { printf("function 4 from state 2\n"); } int f43() { printf("function 4from state 3\n"); } int f44() { printf("function 4 from state 4\n"); } int f5() { printf("function 5\n"); } void main() { typedef struct tt { void * pfunc; int targetState; } tTransCell; tTransCell Trans[][6] = { {{0,0}, {0,0}, {0,0}, {0,0}, {0,0}}, {{f1,1}, {f1,2}, {f1,3}, {f1,4}, {f1,0}}, {{0,1}, {0,2}, {0,3}, {f2,4}, {f2,0}}, {{f3,1}, {f3,2}, {f3,3}, {f3,4}, {f3,0}}, {{f41,1}, {f42,2}, {f43,3}, {f44,4}, {f41,0}}, {{0,1}, {f5,2}, {0,3}, {f5,4}, {0,0}} }; int trans; int curState=0; // etat initial void (*fpointer)(); void * pt; while (1) { printf("entrez le numero de la transition (uniquement une valeur numerique) :"); //getc(trans); scanf("%d", &trans); if (trans == 0) {break;} printf("transition executee %d ", trans); printf("a partir de l etat %d\n ", curState); pt = Trans[trans][curState].pfunc; if (pt == 0) { int ptt; printf("transition interdite\n"); ptt = 5*4+2-8; } else { fpointer = pt; //@ assert (fpointer == pt); curState = Trans[trans][curState].targetState; //@ assert (curState == Trans[trans][curState].targetState); printf("nouvel état %d\n",curState); fpointer(); } } }