logo
Elektr_prak_po_DM

1. Пусть требуется добавить 1 к натуральному числу n, представленному на ленте машины Тьюринга в двоичной системе счисления, то есть в алфавите {0,1}.

Решение: внешний алфавит машины будет следующим: {, 0, 1}.

Будем считать начальной следующую конфигурацию: q11p. Для того, чтобы прибавить 1 к двоичному числу n сначала необходимо "отогнать" головку машины вправо и установить ее под последней (самой младшей) цифрой двоичного числа. Если последняя цифра числа есть 0, то достаточно заменить 0 на 1 и завершить процесс, то есть перевести головку (машину) в заключительное состояние q0.

Если же последняя цифра числа есть 1, то необходимо заменить ее на 0, а головку сдвинуть влево, чтобы "увидеть" следующий разряд двоичного числа. Если окажется, что этот разряд содержит 0, то заменить 0 на 1 и опять-таки перевести головку (машину) в заключительное состояние q0. Если же этот разряд содержит 1, необходимо заменить ее на 0 и опять сдвинуть головку влево. И так далее, до тех пор, пока либо не встретится разряд, содержащий 0, либо головка дойдет до первого слева пустого символа . В любом из этих случаев 0 или следует заменить на 1 и перевести головку (машину) в заключительное состояние q0.

Программа машины, прибавляющей 1 к двоичному числу, имеет вид:

q11 q11R

q10 q10R

q1 q2L

q20 q31H

q21 q20L

q2 q01H

q31 q31L

q30 q30L

q3 q0R.

2. Пусть требуется перевести унарную запись натурального числа n, изображенного в виде последовательности n "палочек" (|) n 1, в двоичную запись в алфавите {0,1}. Т.е. конфигурация q1|||…| должна быть преобразована в q012p , где 12p - двоичная запись n.

Решение: в качестве внешнего алфавита машины берем алфавит:{, |, 0,1}.

Опишем алгоритм решения задачи в словесной форме:

  1. "Отогнать" головку машины влево до первого пустого символа, заменить этот символ нулем (0).

  2. "Отогнать" головку машины вправо до последней черточки, заменить ее пустым символом. Запомнить, что 1 из унарного представления числа n вычтена.

  3. Установить головку под младшим разрядом формируемого двоичного числа и прибавить к двоичному числу 1 (так как мы делали это при построении предыдущей машины). Запомнить, что 1 к двоичному числу прибавлена.

  4. Пункты 2 и 3 повторять до тех пор, пока не исчерпается исходное число, то есть на ленте не останется "палочек".

  5. Головку отогнать в крайнюю левую позицию полученного двоичного числа и остановить машину.

Программа работы машины имеет вид:

q1| q1|L

q1q20R

q2| q2|R

q2 q3L

q3| q4 L

q4 | q4|L

q40 q51R

q41q40L

q4 q51R

q51 q51R

q50 q50R

q5| q2|H

q5 q6 L

q61 q61L

q60 q60L

q6 q0R