На ленте в соседних ячейках записано двоичное представление числа \(14\) без ведущих нулей. Ячейки справа и слева от последовательности заполнены пустыми символами «\(\lambda\)». В начальный момент времени головка расположена в ближайшей ячейке справа от последовательности.
Программа работы исполнителя:
| \(\lambda\) | \(1\) | \(0\) | |
| \(q_0\) | \(\lambda , \, L, \, q_1\) | ||
| \(q_1\) | \(1, \, L, \, q_2\) | \(0, \, L, \, q_3\) | |
| \(q_2\) | \(\lambda , \, S, \, q_2\) | \(0, \, L, \, q_3\) | \(1, \, L, \, q_2\) |
| \(q_3\) | \(\lambda , \, S, \, q_3\) | \(1, \, L, \, q_2\) | \(0, \, L, \, q_3\) |
Определите десятичное значение числа на ленте после выполнения программы.
Решение:
Python
com = {('q0', 'l'): 'l,L,q1', ('q2', 'l'): 'l,S,q2', ('q3', 'l'): 'l,S,q3',
('q1', '1'): '1,L,q2', ('q2', '1'): '0,L,q3', ('q3', '1'): '1,L,q2',
('q1', '0'): '0,L,q3', ('q2', '0'): '1,L,q2', ('q3', '0'): '0,L,q3',}
step = {'L': -1, 'R': 1, 'S': 0}
s = ['l'] + list(f'{14:b}') + ['l']
p = len(s) - 1
state = 'q0'
act = 'L'
while act != 'S':
ch, act, st = com[(state, s[p])].split(',')
s[p] = ch
state = st
p += step[act]
print(int(''.join(s[1:-1]), 2))
Ответ: \(10\)
Эффективно готовьтесь к ЕГЭ по информатике с новым тренажёром, эмулирующем работу станции КЕГЭ, которая используется на реальном экзамене