You are on page 1of 5

Лабораторна робота № 3

Тема: Розробка програм для Машини Тюрінга

Мета роботи: Вивчити машину Тюрінга і способи написання алгоритмів для


неї. Отримати навички з написання алгоритмів розв'язання різних завдань для
машини Тюрінга.

Теоретичні відомості

1. Будова машини Тюрінга

Машина Тюрінга складається з каретки (головки, що зчитує і записує) і


нескінченної стрічки, розбитою на комірки. Кожна комірка стрічки може
містити символ з деякого алфавіту A={a0,a1,…,aN}. Будь-алфавіт містить
символ «пропуск», який позначається як a0 або Λ. При введенні команд
пробіл замінюється знаком підкреслення «_».
Машина Тюрінга - це автомат, який управляється таблицею. Рядки в
таблиці відповідають символам обраного алфавіту A, а стовпчики - станам
автомата Q={q0,q1,…,qM}. На початку роботи машина Тюрінга знаходиться в
стані q1. Стан q0 - це кінцевий стан: потрапивши в нього, автомат закінчує
роботу.
У кожній клітині таблиці, що відповідає деякому символу ai і деякому
стану qj, знаходиться команда, що складається з трьох частин:
1. Символ з алфавіту A;
2. Напрямок переміщення:> (праворуч), <(ліворуч) або. (на місці);
3. Новий стан автомата

2. Система команд машини Тюрінга

Програма для машини Тюрінга представляє собою таблицю, в кожній


клітинці якої записана команда.

Рис. 1. Приклад програми для машини Тюрінга


Команда представляє собою вказівку: куди пересунути голівку читання
/ запису, який символ записати в поточну комірку, в який стан перейти машині.

3. Тренажер «Машина Тюрінга»


Тренажер «Машина Тюрінга» - це навчальна модель універсального
виконавця (абстрактної обчислювальної машини), запропонованого в 1936
році А. Тюрінгом для уточнення поняття алгоритму. Згідно тези Тюрінга,
будь-який алгоритм може бути записаний у вигляді програми для машини
Тюрінга. Доведено, що машина Тюрінга за своїми можливостями
еквівалентна машині Поста і нормальним алгоритмам Маркова.

Рис. 2. Тренажер «Машина Тюрінга»

4. Порядок роботи з тренажером «Машина Тюрінга»

У верхній частині програми знаходиться поле редактора, в яке можна


ввести умову задачі у вільній формі.
Стрічка переміщається вліво і вправо за допомогою кнопок, розташованих
ліворуч і праворуч від неї. Подвійним клацанням по комірку стрічки (або
клацанням правою кнопкою миші) можна змінити її вміст.
За допомогою меню Стрічка можна запам'ятати стан стрічки у
внутрішньому буфері і відновити стрічку з буфера.
В поле Алфавіт задаються символи обраного алфавіту. Пробіл додається
до введених символах автоматично.
У таблиці в нижній частині вікна набирається програма. У першому
стовпці записані символи алфавіту, він заповнюється автоматично. У
першому рядку перераховуються всі можливі стани. Додати і видалити
стовпці таблиці (стану) можна за допомогою кнопок, розташованих над
таблицею.
При введенні команди в клітинку таблиці спочатку потрібно ввести новий
символ, потім напрямок переходу (використовуючи символи > або < для
переходу вправо або вліво або поставити крапку) і номер стану. Якщо символ
пропущений, за замовчуванням він не змінюється. Якщо пропущений номер
стану, за замовчуванням стан автомата не змінюється.
Праворуч в полі Коментар можна вводити в довільній формі коментарі до
вирішення. Найчастіше там пояснюють, що означає кожний стан машини
Тюрінга.
Програма може виконуватися безперервно (F9) або по кроках (F8).
Команда, яка зараз буде виконуватися, підсвічується зеленим фоном.
Швидкість виконання регулюється за допомогою меню Швидкість.
Завдання для машини Тюрінга можна зберігати в файлах. Зберігається
умова задачі, алфавіт, програма, коментарі і початковий стан стрічки. При
завантаженні завдання з файлу і збереження в файлі стан стрічки
автоматично записується в буфер.

5. Приклади розв'язання задач.

Приклад 1. Каретка зсувається праворуч до тих пір, поки не знайде комірку,


в яку записаний нуль. Машина зупиняється над цією коміркою.

Рішення:
Приклад 2. Поставити в першу вільну позицію символ 1.

Рішення:

Приклад 3. Замінити всі символи 0 на символ 1.

Рішення:

Приклад 4. Збільшити число, записане в двійковій системі числення, на 1.


Каретка стоїть над числом.

Рішення:
Приклад 5. Зменшити число, записане в двійковій системі числення, на 1.
Каретка стоїть над числом.

Рішення:

Завдання на лабораторну роботу

Завдання 1. Напишіть програму для машини Тюрінга, яка замінює в


двійковому запису числа всі нулі на одиниці і всі одиниці на нулі. Каретка
стоїть ліворуч від числа.

Завдання 2. На стрічці машини Тюрінга міститься послідовність символів "+".


Напишіть програму для машини Тюрінга, яка кожен другий символ "+"
замінить на "-". Заміна починається з правого кінця послідовності.

Завдання 3. Напишіть програму для машини Тюрінга, яка додає число 3 до


числа на стрічці. Вхідне слово складається з цифр цілого десяткового числа,
записаних в послідовні комірки на стрічці. У початковий момент каретка
знаходиться проти самої правої цифри числа.

Завдання 4. Напишіть програму для машини Тюрінга, яка переміщує перший


символ слова в кінець цього слова. Каретка стоїть над словом.
Алфавіт: A = { , a, b, c}.

Завдання 5. Напишіть програму для машини Тюрінга, яка видаляє з слова P


його другий символ ‘a’, якщо такий є. При цьому, всі інші символи після
видаленого, зміщуються на одну позицію ліворуч. Алфавіт: A = { , a, b}. У
початковий момент каретка знаходиться проти самого лівого символу слова.

Завдання 6. Напишіть програму для машини Тюрінга, яка в послідовності


дужок, що відкриваються і закриваються, замінює символом «пробіл» усі пари
взаємних дужок, що розташовані поруч. У початковий момент каретка
знаходиться проти самого лівого символу слова.
Наприклад, дано: «)(()(()(», треба отримати: «)( ( (».

You might also like