Машина Тьюринга: вычисление остатка от деления

Сообщение было отмечено VSI как решение

Решение

Ну, да, не работает, хотя в начале работы алгоритма заметно, что логика решения есть.

В конечном итоге вам нужно отладить вашу программу. Аналогично тому, как вы отлаживаете свои программы на традиционных языках программирования. Т.е. составить некий алгоритм, аналогичный тому что я составил в предыдущем сообщении и заставить вашу программу реализовать именно его, а не что-то похожее.

Но сначала я рекомендовал бы переписать всю программу. Вы же видите мой алгоритм. Достаточно двух символов в алфавите. Ну хорошо, по условию у вас входные числа разделены не пробелом, а "*", тогда достаточно трех символов. У символов больше необходимого минимума. Это делает все ваше решение в сложнее. Вы добавили в решение не нужных сущностей, в которых и запутались.

Вообще, либо попытайтесь реализовать мой алгоритм. Либо опишите свой, иначе как вы хотите чтобы кто-то нашел ошибки в алгоритме, который известен только вам?

Далее, весь алгоритм основан на том факте, что остаток от деления 6 на 4 равен остатку от деления 2 на 4. Т.е. конкретно в этом примере если изначально на ленте записано
111111*1111
то где-то в середине решения на ленте должно остаться
11*1111
и машина переходит снова в начальное состояние и решает задачу точно также, как если бы с самого начала и была задача найти остаток от деления 2 на 4.
У вас же остались символы "&" и "=" и я не увидел в вашем решении попыток их удалить. Это неверный подход. Исправляйте.

Более нагляден пример нахождения остатка от деления 14 на 4
В процессе решения нужно получить вот такие состояния ленты:
11111111111111*1111 --> 1111111111*1111 --> 111111*1111 --> 11*1111 --> 11

Наконец, не надо выкладывать скриншоты. Тем более, на скриншот попали не все команды. В вашем эмуляторе есть возможность сохранить команды машины, вот этот файл и прикладывайте.

0