2.2 Составление схем
Процесс проектирования заключается составлении алгоритмов, которые будут исполняться позже на машине Поста. Основными вспомогательными элементами являются крупная схема алгоритма (рис.3), позволяющая представить метод решения в целом; и детализированная схема алгоритма, отображающая будущий код в доступном восприятию человека схематическом виде (рис.4).
Рисунок 3 – Крупная схема алгоритма
Рисунок 4 – Детализированная схема алгоритма. Лист 1
Рисунок 4 Лист 2
Рисунок 4 Лист 3
Рисунок 4 Лист 4
2.3 Написание программы на машине Поста
Результатом написания кода на машине Поста является работающая программа, позволяющая вычитать модули унарных чисел. Скриншоты работающей программы представлены на рисунках 5-8.
Рисунок 5 – Работающая программа Поста (Снимок 1)
Рисунок 6 – Работающая программа Поста (Снимок 2)
Рисунок 7 – Работающая программа Поста (Снимок 3)
Рисунок 8 – Работающая программа Поста (Снимок 4)
2.4 Анализ результата
Полученная программа полностью выполняет поставленные задачи.
Задача имеет 89 строк кода, т.к. рассматривает все возможные случаи, включая вычитание из меньшего числа большего, вычитание одной единицы, вычитание равных чисел и др.
3 Разработка программы для машины тьюринга
3.1 Идея решения
Идея решения заключается в том, чтобы, посимвольно копировать число справа от исходного (числа разделить знаком «*»), записывая справа от ненулевых цифр по одному нулю и стирая исходное число и затем знак «*».
Внешний
алфавит машины Тьюринга:
A={
,0,1,2,3,4,5,6,7,8,9}
Для определения внутреннего алфавита составим пошаговый алгоритм:
Стирание цифры.
Движение вправо до конца слова.
Установка разделителя «*».
Запись цифры (от 1 до 9) в очередной позиции копии слова после прохождения уже построенной части этой копии.
Запись нуля.
Возврат влево к началу исходного слова.
Повторение в цикле этапов 1..6 (при этом новый разделитель не устанавливается).
Повторение в цикле этапов 1..7 для каждой цифры от 0 до 9.
Последний возврат.
Стирание разделителя «*».
Установка стандартной конечной конфигурации.
Отсюда можно выделить 23 состояния автомата:
q1 – стираем символ;
q2 – движемся вправо до пробела (0);
q3 – движемся вправо до пробела (1);
q4 – записываем символ (1);
q5 – движемся вправо до пробела (2);
q6 – записываем символ (2);
q7 – движемся вправо до пробела (3);
q8 – записываем символ (3);
q9 – движемся вправо до пробела (4);
q10 – записываем символ (4);
q11 – движемся вправо до пробела (5);
q12 – записываем символ (5);
q13 – движемся вправо до пробела (6);
q14 – записываем символ (6);
q15 – движемся вправо до пробела (7);
q16 – записываем символ (7);
q17 – движемся вправо до пробела (8);
q18 – записываем символ (8);
q19 – движемся вправо до пробела (9);
q20 – записываем символ (9);
q21 – записываем ноль;
q22 – движемся влево до пробела;
qZ – выход.
