2016 [9-10] Защитный блок
Промышленная установка управляется по 4-разрядной шине данных. Команды по ней передаются последовательно. Для удобства записи будем интерпретировать их как символы в алфавите 0,1,2,..,9,A,B,C,D,E,F.
Известно, что некоторые цепочки команд приводят к поломке установки. Поэтому на шине планируется установить защитный блок, исправляющий такие цепочки на безопасные. Логика работы защитного блока определяется двумя таблицами. Первая из них определяет следующую активную строку в зависимости от входного символа и текущей активной строки (функция переходов). Вторая таблица определяет, что появится на выходе защитного блока в зависимости от входного символа и текущей активной строки (функция выходов). В начальный момент времени активна строка с номером 0. Фрагмент кода функции работы защитного блока приведен ниже.
Паскаль |
Си |
type matrix= array[1..n,1..m] of integer; function GetOutput( StateMas : matrix;
integer; var NewState:integer; OutSymb:integer; begin NewState := StateMas[CurState] [InSymb]; OutSymb := OutMas[CurState] [InSymb]; CurState := NewState; result := OutSymb; end; |
int GetOutput( int **StateMas,
// StateMas –таблица(матрица) переходов // OutMas – таблица(матрица) выходов // InSymb – входной символ // CurState – текущее состояние (меняется в результате выполнения функции) // RETURN – выходной символ { int NewState; int OutSymb;
NewState = StateMas[CurState] [InSymb]; OutSymb = OutMas[CurState] [InSymb]; CurState = NewState; return OutSymb; } |
Настройте защитный блок таким образом, чтобы он пропускал все команды, кроме запрещенных, вместо которых на выходе должна появиться безопасная выходная последовательность (см. таблицу).
Запрещенная входная
|
Выходная последовательность |
1F10AE |
1F10A1 |
Результат выполнения задачи – файл с прошивкой защитного блока.
Комментарий. К задаче прилагается: программа обучения и тестирования защитного блока.