Язык Си в примерах/Простая реализация конечного автомата: различия между версиями
Содержимое удалено Содержимое добавлено
Karagota (обсуждение | вклад) мНет описания правки |
Karagota (обсуждение | вклад) мНет описания правки |
||
Строка 1: | Строка 1: | ||
{{Содержание «Язык Си в примерах»}} |
|||
Ниже приведена реализация конечного автомата, который |
Ниже приведена реализация конечного автомата, который |
||
прибавляет 1 к числу, поданному на вход в виде двоичной записи начиная с младшего разряда. |
прибавляет 1 к числу, поданному на вход в виде двоичной записи начиная с младшего разряда. |
Версия от 18:18, 29 марта 2006
- Компиляция программ
- Простейшая программа «Hello World»
- Учимся складывать
- Максимум
- Таблица умножения
- ASCII-коды символов
- Верхний регистр
- Скобочки
- Факториал
- Степень числа
- Треугольник Паскаля
- Корень уравнения
- Система счисления
- Сортировка
- Библиотека complex
- Сортировка на основе qsort
- RPN-калькулятор
- RPN-калькулятор на Bison
- Простая грамматика
- Задача «Расчёт сопротивления схемы»
- Простая реализация конечного автомата
- Использование аргументов командной строки
- Чтение и печать без использования stdio
- Декодирование звукозаписи в формате ADX
- Другие примеры
Ниже приведена реализация конечного автомата, который прибавляет 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; } }