Статья Автор: Лебедев Дмитрий Алексеевич

Реализуем МТ как процедуру и решаем задачи

Реализуем МТ как процедуру, которая получает на вход:
  • начальную последовательность df
  • словарь состояний DS, где ключ состояние, а значение словарь позиций (ключ позиция, значение - описание действий)
  • начальное состояние (ts) и начальную позицию (pos)
Возвращает:
  • изменяет df   
  • финальное состояние и финальную позицию
  • код возврата (причину завершения работы)
Подпрограмма:
  • не изменяет длину списка df
  • умеет обрабатывать команды перемещения указателя:
    • R - сдвиг вправо на одну позицию
    • L - сдвиг влево на одну позицию
    • N - позиция указателя не изменяется
    • S - остановка (штатное завершения программы)
  • обрабатывает остановку и возвращает код:
    • 0 - остановка штатная
    • 1 - не найдено состояние в словаре состояний
    • 2 - не найдена позиция для состояния в словаре действий
    • 3 - попытка получить значение вне позиций списка
Работу программы приведем на примере получения следующего значения в двоичной системе.
Будем выполнять программу, пока длина списка будет меньше 7
Начальное значение ' 0 '


Теперь можно использовать процедуру MT и описывать нужные словари.
Попробуем решить задачу "Сортировка", то есть получение последовательности, в которой
вначале все нули, а затем все 1
Например из #101101# надо получить #001111#
Попробуем создать таблицу:
  • Состояние ноль - движение ВПРАВО до 1( переход в состояние один) или #(остановка)
  • Состояние один - движение ВПРАВО до 0(переход в состояние два без движения головки) или #(остановка)
  • Состояние два -  запись 1, ВЛЕВО, состояние три
  • Состояние три - запись 0, ВЛЕВО, состояние четыре
  • Состояние четыре - ВЛЕВО до # (переход в состояние ноль)
Возможны и другие решения 


Реализация с очередью (то есть универсальная)

Печать