Здравствуйте,есть задача:
Написать консольную программу, которая имитирует собой один рукав топливной колонки.
На вход программы поступают символы A-F,0-9, "пробел", "\n" (перевод строки) и Q. Программа считывает их из стандартного ввода (getchar ). Пробелы и переводы строки программа игнорирует. Из шестнадцатеричных цифр программа собирает байты, которые затем обрабатывает. Первая цифра означает старший "полубайт", вторая - младший. Получив символ Q, программа завершается.
Результат своей работы программа выдает на стандартный вывод. При этом после каждого байта программа передает пробел, а после каждого пакета - абзац. Например, программе надо выдать пакет из 3 байт 0xA8, 0x30, 0x97. При этом она должна вывести (putchar) "A8 30 97 \n".
Есть универсальный протокол обмена данными Искра, программа должна поддерживать только часть протокола, а именно:
• Один рукав, имеющий адрес 1
• Состояния 5, 1, 3, 4
• Команды 0x34, 0x31, 0x35, 0x36, 0x37
• Получив команду 0x31 в состоянии 5, рукав переходит в состояние 1
• Получив команду 0x35 в состоянии 1, рукав переходит в состоянии 3.
• Считаем, что топливо не отпускается - т.е. в состоянии 3 рукав всегда сообщает одну и ту же дозу - которую ему задали командой 0x31
• Считаем, что рукав может принять дозу с точностью до миллилитра, формат объема - 3.3 (002400 = 2,4 л), формат цены = 4.2 (001234 = 12,34 р/л)
• При запуске программы рукав всегда в состоянии 5.
Почитал Ритчи и Кернигана, но понимание приходит не так быстро как хотелось бы, быть может, подскажете книги/ресурсы где подобные примеры рассматриваются, все же данная задача далеко не ноу-хау, аналоги должны быть, спасибо.