Раздел «Язык Си».SimpleFA:

Простая реализация конечного автомата

Ниже приведена реализация конечного автомата, который прибавляет 1 к числу, поданному на вход в виде двоичной записи, начиная с младшего разряда.

#include <stdio.h>
int c;
 
int
main()
{
    goto s1;
     
s2: c = getchar();
     
    switch(c)
        {
         case EOF:
            exit(0);
         default :
            putchar(c);
            goto s2;
        }
s1: c = getchar();
    switch (c)
        {
        case EOF:
            exit(0);
        case '1':
            putchar('0');
            goto s1;
        case '0':
            putchar('1');
            goto s2;
        }
     
}

#include <stdio.h>

int 
char_to_id (int c) 
{
    switch (c) {
        case '0': return 0;
        case '1': return 1;
        case EOF: return 2;
        default: return 2;
    }
}

typedef struct table_item_s {
    int state;
    int out_char;

} table_item_t;

#define END_STATE 2
table_item_t
T[2][3] = {
    { {1, '1'}, {0, '0'} , {END_STATE, '\n'}},
    { {1, '0'}, {1, '1'} , {END_STATE, '\n'}}
};


int 
main() 
{
    int c, c_id;
    int state = 0;
    while (!feof(stdin)) {
        c = getchar();
        c_id  = char_to_id(c);
        putchar(T[state][c_id].out_char);
        state = T[state][c_id].state;
        if (state == END_STATE)
            return 0;
    }
}

-- ArtemVoroztsov - 23 Sep 2005