|
Задача 1.
Машина Поста состоит из ленты, разбитой на ячейки, и каретки,
которая может считывать содержимое обозреваемой ячейки, стирать метки и
ставить метки. Создайте компьютерную модель машины Поста, вычитающей
два числа. |
Алгоритм вычитания целых чисел для машины Поста приведен ниже.
В первых двух строчках указывается положение каретки и состояние
ленты, на которой в унарной системе счисления записаны два числа
(в данном случае 6 и 4). В результате исполнения программы на ленте
останется число 2 в унарной системе счисления.
7 -- координата каретки
VVVVVV-VVVV------------------------- лента
1 сместить влево, команда 2
2 если пусто -- команда 1, если метка -- команда 3
3 удалить метку, команда 4
4 сместить вправо, команда 5
5 если пусто -- команда 4, если метка -- команда 6
6 удалить метку, команда 7
7 сместить вправо, команда 8
8 если пусто -- команда 9, если метка -- команда 1
9 остановить МП.
Используется программа ПР-1, результат - на рис. 1.
|
|
Программа ПР-1.
Вычитание 6 - 2 = 4
V V V V V V - V V - - - - - - - - - - - - - - - - - - - - | 1 |
------------M
V V V V V V - V V - - - - - - - - - - - - - - - - - - - - | 2 |
----------M
V V V V V - - V V - - - - - - - - - - - - - - - - - - - - | 3 |
----------M
V V V V V - - V V - - - - - - - - - - - - - - - - - - - - | 4 |
------------M
V V V V V - - V V - - - - - - - - - - - - - - - - - - - - | 5 |
--------------M
V V V V V - - - V - - - - - - - - - - - - - - - - - - - - | 6 |
--------------M
V V V V V - - - V - - - - - - - - - - - - - - - - - - - - | 7 |
----------------M
V V V V V - - - V - - - - - - - - - - - - - - - - - - - - | 8 |
--------------M
V V V V V - - - V - - - - - - - - - - - - - - - - - - - - | 9 |
------------M
V V V V V - - - V - - - - - - - - - - - - - - - - - - - - | 10 |
----------M
V V V V V - - - V - - - - - - - - - - - - - - - - - - - - | 11 |
--------M
V V V V - - - - V - - - - - - - - - - - - - - - - - - - - | 12 |
--------M
V V V V - - - - V - - - - - - - - - - - - - - - - - - - - | 13 |
----------M
V V V V - - - - V - - - - - - - - - - - - - - - - - - - - | 14 |
------------M
V V V V - - - - V - - - - - - - - - - - - - - - - - - - - | 15 |
--------------M
V V V V - - - - V - - - - - - - - - - - - - - - - - - - - | 16 |
----------------M
V V V V - - - - - - - - - - - - - - - - - - - - - - - - - | 17 |
----------------M
V V V V - - - - - - - - - - - - - - - - - - - - - - - - - | 18 |
------------------M
КОНЕЦ РАБОТЫ
Рис. 1. Вычитание целых чисел.
|
Задача 2.
Напишите компьютерную программу, моделирующую машину
Поста, которая увеличивает целое число на 2.
|
Алгоритм увеличения целого числа на 2 представлен ниже:
3 -- координата каретки
VVVVVVV----------------------------- лента
1 сместить вправо, команда 2
2 если пусто - команда 3, если метка - команда 1
3 поставить метку, команда 4
4 сместить вправо, команда 5
5 поставить метку, команда 6
6 остановить МП.
Для реализации этого алгоритма в процедуру Programma
программы ПР-1 необходимо вставить следующий код:
x:=3; {координата головки}
lenta:='VVVVVVV------------------------------------';
kom[1]:='right'; k[1]:=2;
kom[2]:='if'; k[2]:=3; kk[2]:=1;
kom[3]:='metka'; k[3]:=4;
kom[4]:='right'; k[4]:=5;
kom[5]:='metka'; k[5]:=6;
kom[6]:='stop'; k[6]:=0;
Результат работы программы -- на рис. 2.
|
|
Сложение 7 + 2 = 9
V V V V V V V - - - - - - - - - - - - - - - - - - - - - - | 1 |
----M
V V V V V V V - - - - - - - - - - - - - - - - - - - - - - | 2 |
------M
V V V V V V V - - - - - - - - - - - - - - - - - - - - - - | 3 |
--------M
V V V V V V V - - - - - - - - - - - - - - - - - - - - - - | 4 |
----------M
V V V V V V V - - - - - - - - - - - - - - - - - - - - - - | 5 |
------------M
V V V V V V V - - - - - - - - - - - - - - - - - - - - - - | 6 |
--------------M
V V V V V V V V - - - - - - - - - - - - - - - - - - - - - | 7 |
--------------M
V V V V V V V V - - - - - - - - - - - - - - - - - - - - - | 8 |
----------------M
V V V V V V V V V - - - - - - - - - - - - - - - - - - - - | 9 |
----------------M
КОНЕЦ РАБОТЫ
Рис. 2. Увеличение числа на 2
|
Задача 3.
Напишите компьютерную программу, моделирующую машину
Поста, которая уменьшает целое число на 2.
|
Пусть на ленте машины Поста записано число 6, каретка находится
напротив левой ячейки (координата x=1). Для вычитания из любого целого
N числа 2 в процедуру Programma программы ПР-1 следует вставить
следующий код:
x:=1; lenta:='VVVVVV-------------------------------';
kom[1]:='right'; k[1]:=2;
kom[2]:='if'; k[2]:=3; kk[2]:=1;
kom[3]:='left'; k[3]:=4;
kom[4]:='erase'; k[4]:=5;
kom[5]:='left'; k[5]:=6;
kom[6]:='erase'; k[6]:=7;
kom[7]:='stop';
Результат работы программы -- на рис. 3.
|
|
Вычитание 6 - 2 = 4
V V V V V V - - - - - - - - - - - - - - - - - - - - - - - | 1 |
M
V V V V V V - - - - - - - - - - - - - - - - - - - - - - - | 2 |
--M
V V V V V V - - - - - - - - - - - - - - - - - - - - - - - | 3 |
----M
V V V V V V - - - - - - - - - - - - - - - - - - - - - - - | 4 |
------M
V V V V V V - - - - - - - - - - - - - - - - - - - - - - - | 5 |
--------M
V V V V V V - - - - - - - - - - - - - - - - - - - - - - - | 6 |
----------M
V V V V V V - - - - - - - - - - - - - - - - - - - - - - - | 7 |
------------M
V V V V V V - - - - - - - - - - - - - - - - - - - - - - - | 8 |
----------M
V V V V V - - - - - - - - - - - - - - - - - - - - - - - - | 9 |
----------M
V V V V V - - - - - - - - - - - - - - - - - - - - - - - - | 10 |
--------M
V V V V - - - - - - - - - - - - - - - - - - - - - - - - - | 11 |
--------M
КОНЕЦ РАБОТЫ
Рис. 3. Уменьшение целого числа на 2
|
Задача 4.
Напишите компьютерную программу, моделирующую машину
Поста, которая складывает два целых числа.
|
Программа сложения целых чисел на машине Поста выглядит так:
5 -- координата каретки
VVVV-VVV------------------------------------- лента
1 поставить метку, команда 2
2 сместить вправо, команда 3
3 если пусто -- команда 4, если метка -- команда 2
4 сместить влево, команда 5
5 удалить метку, команда 6
6 остановить МП.
В программу ПР-1 следует вставить код:
x:=5; {сложение двух чисел}
lenta:='VVVV-VVV------------------------------------';
komand[1]:='metka'; k[1]:=2;
komand[2]:='right'; k[2]:=3;
komand[3]:='if'; k[3]:=4; kk[3]:=2;
komand[4]:='left'; k[4]:=5;
komand[5]:='erase'; k[5]:=6;
komand[6]:='stop'; k[6]:=0;
Результат работы программы - на рис. 4.
|
|
Сложение 4 + 3 = 7
V V V V - V V V - - - - - - - - - - - - - - - - - - - - - | 1 |
--------M
V V V V V V V V - - - - - - - - - - - - - - - - - - - - - | 2 |
--------M
V V V V V V V V - - - - - - - - - - - - - - - - - - - - - | 3 |
----------M
V V V V V V V V - - - - - - - - - - - - - - - - - - - - - | 4 |
------------M
V V V V V V V V - - - - - - - - - - - - - - - - - - - - - | 5 |
--------------M
V V V V V V V V - - - - - - - - - - - - - - - - - - - - - | 6 |
----------------M
V V V V V V V V - - - - - - - - - - - - - - - - - - - - - | 7 |
--------------M
V V V V V V V - - - - - - - - - - - - - - - - - - - - - - | 8 |
--------------M
КОНЕЦ РАБОТЫ
Рис. 4. Сложение двух целых чисел
|
Задача 5.
Напишите компьютерную программу, моделирующую машину
Поста, которая умножает целое число на 2.
|
x:=2; {Умножение числа на 2}
lenta:='-VVV-------------------------------------';
kom[1]:='right'; k[1]:=2;
kom[2]:='if'; k[2]:=3; kk[2]:=1;
kom[3]:='left'; k[3]:=4;
kom[4]:='erase'; k[4]:=5;
kom[5]:='right'; k[5]:=6;
kom[6]:='metka'; k[6]:=7;
kom[7]:='right'; k[7]:=8;
kom[8]:='metka'; k[8]:=9;
kom[9]:='left'; k[9]:=10;
kom[10]:='if'; k[10]:=11; kk[10]:=9;
kom[11]:='left'; k[11]:=12;
kom[12]:='if'; k[12]:=11; kk[12]:=13;
kom[13]:='erase'; k[13]:=14;
kom[14]:='left'; k[14]:=15;
kom[15]:='if'; k[15]:=20; kk[15]:=16;
kom[16]:='right'; k[16]:=17;
kom[17]:='if'; k[17]:=16; kk[17]:=18;
kom[18]:='right'; k[18]:=19;
kom[19]:='if'; k[19]:=6; kk[19]:=18;
kom[20]:='right'; k[20]:=21;
kom[21]:='if'; k[21]:=20; kk[21]:=22;
kom[22]:='right'; k[22]:=23;
kom[23]:='if'; k[23]:=24; kk[23]:=22;
kom[24]:='metka'; k[24]:=25;
kom[25]:='right'; k[25]:=26;
kom[26]:='metka'; k[26]:=27;
kom[27]:='stop'; k[28]:=0;
Результат решения представлен на рис. 5.
Возможен другой способ решения:
x:=9; lenta:='-VVVVV---------------------------';
kom[1]:='metka'; k[1]:=2;
kom[2]:='right'; k[2]:=3;
kom[3]:='metka'; k[3]:=4;
kom[4]:='left'; k[4]:=5;
kom[5]:='if'; k[5]:=6; kk[5]:=4;
kom[6]:='left'; k[6]:=7;
kom[7]:='if'; k[7]:=6; kk[7]:=8;
kom[8]:='erase'; k[8]:=9;
kom[9]:='left'; k[9]:=10;
kom[10]:='if'; k[10]:=15; kk[10]:=11;
kom[11]:='right'; k[11]:=12;
kom[12]:='if'; k[12]:=11; kk[12]:=13;
kom[13]:='right'; k[13]:=14;
kom[14]:='if'; k[14]:=1; kk[14]:=13;
kom[15]:='stop'; k[15]:=0;
|
|
Умножение 3 * 2 = 6
- V V V - - - - - - - - - - - - - - - - - - - - - - - - - | 1 |
--M
- V V V - - - - - - - - - - - - - - - - - - - - - - - - - | 2 |
----M
- V V V - - - - - - - - - - - - - - - - - - - - - - - - - | 3 |
------M
- V V V - - - - - - - - - - - - - - - - - - - - - - - - - | 4 |
--------M
- V V V - - - - - - - - - - - - - - - - - - - - - - - - - | 5 |
------M
- V V - - - - - - - - - - - - - - - - - - - - - - - - - - | 6 |
------M
- V V - - - - - - - - - - - - - - - - - - - - - - - - - - | 7 |
--------M
- V V - V - - - - - - - - - - - - - - - - - - - - - - - - | 8 |
--------M
- V V - V - - - - - - - - - - - - - - - - - - - - - - - - | 9 |
----------M
- V V - V V - - - - - - - - - - - - - - - - - - - - - - - | 10 |
----------M
- V V - V V - - - - - - - - - - - - - - - - - - - - - - - | 11 |
--------M
- V V - V V - - - - - - - - - - - - - - - - - - - - - - - | 12 |
------M
- V V - V V - - - - - - - - - - - - - - - - - - - - - - - | 13 |
----M
- V - - V V - - - - - - - - - - - - - - - - - - - - - - - | 14 |
----M
- V - - V V - - - - - - - - - - - - - - - - - - - - - - - | 15 |
--M
- V - - V V - - - - - - - - - - - - - - - - - - - - - - - | 16 |
----M
- V - - V V - - - - - - - - - - - - - - - - - - - - - - - | 17 |
------M
- V - - V V - - - - - - - - - - - - - - - - - - - - - - - | 18 |
--------M
- V - - V V - - - - - - - - - - - - - - - - - - - - - - - | 19 |
----------M
- V - - V V - - - - - - - - - - - - - - - - - - - - - - - | 20 |
------------M
- V - - V V V - - - - - - - - - - - - - - - - - - - - - - | 21 |
------------M
- V - - V V V - - - - - - - - - - - - - - - - - - - - - - | 22 |
--------------M
- V - - V V V V - - - - - - - - - - - - - - - - - - - - - | 23 |
--------------M
- V - - V V V V - - - - - - - - - - - - - - - - - - - - - | 24 |
------------M
- V - - V V V V - - - - - - - - - - - - - - - - - - - - - | 25 |
----------M
- V - - V V V V - - - - - - - - - - - - - - - - - - - - - | 26 |
--------M
- V - - V V V V - - - - - - - - - - - - - - - - - - - - - | 27 |
------M
- V - - V V V V - - - - - - - - - - - - - - - - - - - - - | 28 |
----M
- V - - V V V V - - - - - - - - - - - - - - - - - - - - - | 29 |
--M
- - - - V V V V - - - - - - - - - - - - - - - - - - - - - | 30 |
--M
- - - - V V V V - - - - - - - - - - - - - - - - - - - - - | 31 |
M
- - - - V V V V - - - - - - - - - - - - - - - - - - - - - | 32 |
--M
- - - - V V V V - - - - - - - - - - - - - - - - - - - - - | 33 |
----M
- - - - V V V V - - - - - - - - - - - - - - - - - - - - - | 34 |
------M
- - - - V V V V - - - - - - - - - - - - - - - - - - - - - | 35 |
--------M
- - - - V V V V - - - - - - - - - - - - - - - - - - - - - | 36 |
----------M
- - - - V V V V - - - - - - - - - - - - - - - - - - - - - | 37 |
------------M
- - - - V V V V - - - - - - - - - - - - - - - - - - - - - | 38 |
--------------M
- - - - V V V V - - - - - - - - - - - - - - - - - - - - - | 39 |
----------------M
- - - - V V V V V - - - - - - - - - - - - - - - - - - - - | 40 |
----------------M
- - - - V V V V V - - - - - - - - - - - - - - - - - - - - | 41 |
------------------M
- - - - V V V V V V - - - - - - - - - - - - - - - - - - - | 42 |
------------------M
КОНЕЦ РАБОТЫ
Рис. 5. Умножение целого числа на 2
|
Задача 6.
Машина Тьюринга состоит из бесконечной ленты и головки, которая
перемещается относительно ленты, стирает символы, ставит новые символы.
Напишите программу, моделирующую работу машины Тьюринга, которая
увеличивает заданное число на 2.
|
Используется программа ПР-2. Состояние ленты машины Тьюринга
записывается в массиве:
c=('_','1','1','1','1','1','1',
'_','_','_','_','_','_','_','_');
Положение головки определяется переменной m, исходное
состояние машины Тьюринга - переменной q:
m:=2; { положение головки }
q:='1';
Программа для машины Тьюринга записывается в виде
последовательности команд, представленных в общепринятом
формате:
"(Состояние q1) (Читаю символ s1) ==>
(Новое состояние q2) (Напечатать символ s1)
(Сместить головку вправо (R), влево (L) или
остановиться (S))"
Программа для машины Тьюринга, увеличивающая целое число на 2,
состоит из 3 команд:
kom[1]:='11>11R';
kom[2]:='1_>21R';
kom[3]:='2_>21S';
Результат ее использования -- на рис. 6.
|
|
Программа ПР-2.
_ 1 1 1 1 1 1 _ _ q=1 k=1
====|
_ 1 1 1 1 1 1 _ _ q=1 k=2
======|
_ 1 1 1 1 1 1 _ _ q=1 k=3
========|
_ 1 1 1 1 1 1 _ _ q=1 k=4
==========|
_ 1 1 1 1 1 1 _ _ q=1 k=5
============|
_ 1 1 1 1 1 1 _ _ q=1 k=6
==============|
_ 1 1 1 1 1 1 1 _ q=2 k=7
================|
_ 1 1 1 1 1 1 1 1 q=2 k=8
================|
Рис. 6. Увеличение целого числа на 2
|
Задача 7.
Напишите программу для МТ, складывающую два целых
числа, заданных набором единиц.
|
Пусть начальное состояние ленты машины Тьюринга: _11111_1111__ ,
головка находится напротив левой единицы. МТ находится в
состоянии 1. Программа выглядит так:
q | "1" | "_" |
1 | | 2_R |
2 | 21R | 31R |
3 | 31R | 4_L |
4 | 1_S | |
В программу ПР-2 следует вставить код:
c=('_','1','1','1','1','1','_','1','1','1','1',
'_','_','_','_');
m:=2; q:='1';
kom[1]:='11>11R';
kom[2]:='1_>21R';
kom[3]:='21>21R';
kom[4]:='2_>3_L';
kom[5]:='31>3_S';
Результат работы программы представлен на рис. 7.
|
|
_ 1 1 1 1 1 _ 1 1 1 1 _ _ _ _ q=1 k=1
====|
_ 1 1 1 1 1 _ 1 1 1 1 _ _ _ _ q=1 k=2
======|
_ 1 1 1 1 1 _ 1 1 1 1 _ _ _ _ q=1 k=3
========|
_ 1 1 1 1 1 _ 1 1 1 1 _ _ _ _ q=1 k=4
==========|
_ 1 1 1 1 1 _ 1 1 1 1 _ _ _ _ q=1 k=5
============|
_ 1 1 1 1 1 1 1 1 1 1 _ _ _ _ q=2 k=6
==============|
_ 1 1 1 1 1 1 1 1 1 1 _ _ _ _ q=2 k=7
================|
_ 1 1 1 1 1 1 1 1 1 1 _ _ _ _ q=2 k=8
==================|
_ 1 1 1 1 1 1 1 1 1 1 _ _ _ _ q=2 k=9
====================|
_ 1 1 1 1 1 1 1 1 1 1 _ _ _ _ q=2 k=10
======================|
_ 1 1 1 1 1 1 1 1 1 1 _ _ _ _ q=3 k=11
====================|
_ 1 1 1 1 1 1 1 1 1 _ _ _ _ _ q=3 k=12
====================|
Рис. 7. Сложение целых чисел
|
Задача 8.
На ленте МТ - конечный набор единиц: _11111__.
Напишите программу, которая ставит звездочки вместо первой
и последней единицы, остальные стирает.
|
Пусть машина Тьюринга находится в состоянии 1.
В компьютерную программу ПР-2 необходимо вставить
следующий код:
c=('_','1','1','1','1','1','1','1','1',
'1','1','_','_','_','_');
m:=1; q:='1';
kom[1]:='1_>1_R';
kom[2]:='2_>2_L';
kom[3]:='3_>3_S';
kom[4]:='11>21R';
kom[5]:='21>2*R';
kom[6]:='31>3*L';
kom[7]:='2*>3*L';
kom[8]:='3*>3_L';
|
|
Результат -- на рис. 8.
_ 1 1 1 1 1 1 1 1 1 1 _ _ _ _ q=1 k=1
==|
_ 1 1 1 1 1 1 1 1 1 1 _ _ _ _ q=2 k=2
====|
_ 1 * 1 1 1 1 1 1 1 1 _ _ _ _ q=2 k=3
======|
_ 1 * * 1 1 1 1 1 1 1 _ _ _ _ q=2 k=4
========|
_ 1 * * * 1 1 1 1 1 1 _ _ _ _ q=2 k=5
==========|
_ 1 * * * * 1 1 1 1 1 _ _ _ _ q=2 k=6
============|
_ 1 * * * * * 1 1 1 1 _ _ _ _ q=2 k=7
==============|
_ 1 * * * * * * 1 1 1 _ _ _ _ q=2 k=8
================|
_ 1 * * * * * * * 1 1 _ _ _ _ q=2 k=9
==================|
_ 1 * * * * * * * * 1 _ _ _ _ q=2 k=10
====================|
_ 1 * * * * * * * * * _ _ _ _ q=2 k=11
======================|
_ 1 * * * * * * * * * _ _ _ _ q=2 k=12
====================|
_ 1 * * * * * * * * * _ _ _ _ q=3 k=13
==================|
_ 1 * * * * * * * _ * _ _ _ _ q=3 k=14
================|
_ 1 * * * * * * _ _ * _ _ _ _ q=3 k=15
==============|
_ 1 * * * * * _ _ _ * _ _ _ _ q=3 k=16
============|
_ 1 * * * * _ _ _ _ * _ _ _ _ q=3 k=17
==========|
_ 1 * * * _ _ _ _ _ * _ _ _ _ q=3 k=18
========|
_ 1 * * _ _ _ _ _ _ * _ _ _ _ q=3 k=19
======|
_ 1 * _ _ _ _ _ _ _ * _ _ _ _ q=3 k=20
====|
_ 1 _ _ _ _ _ _ _ _ * _ _ _ _ q=3 k=21
==|
_ * _ _ _ _ _ _ _ _ * _ _ _ _ q=3 k=22
|
_ * _ _ _ _ _ _ _ _ * _ _ _ _ q=3 k=23
|
Рис. 8. Замена единиц на звездочки и пробелы
|
Задача 9.
На ленте МТ - конечный набор единиц: _111111__.
Напишите программу, которая заменяет единицы звездочками.
Головка - левее первой единицы.
|
Программа для машины Тьюринга имеет вид:
q | "_" | "1" | "*" |
1 | 1_R | 3*R | |
2 | 2_L | 2*R | 3*L |
3 | 3_S | 2*R | 3*L |
Для решения этой задачи в программу ПР-2 следует
вставить код:
c=('_','_','1','1','1','1','1','1',
'1','1','1','1','_','_','_');
m:=1; q:='1';
kom[1]:='1_>1_R';
kom[2]:='2_>2_L';
kom[3]:='3_>3_S';
kom[4]:='11>3*R';
kom[5]:='21>2*R';
kom[6]:='31>2*R';
kom[7]:='2*>3*L';
kom[8]:='3*>3*L';
Результат работы программы представлен на рис.9.
|
|
_ _ 1 1 1 1 1 1 1 1 1 1 _ _ _ q=1 k=1
==|
_ _ 1 1 1 1 1 1 1 1 1 1 _ _ _ q=1 k=2
====|
_ _ * 1 1 1 1 1 1 1 1 1 _ _ _ q=3 k=3
======|
_ _ * * 1 1 1 1 1 1 1 1 _ _ _ q=2 k=4
========|
_ _ * * * 1 1 1 1 1 1 1 _ _ _ q=2 k=5
==========|
_ _ * * * * 1 1 1 1 1 1 _ _ _ q=2 k=6
============|
_ _ * * * * * 1 1 1 1 1 _ _ _ q=2 k=7
==============|
_ _ * * * * * * 1 1 1 1 _ _ _ q=2 k=8
================|
_ _ * * * * * * * 1 1 1 _ _ _ q=2 k=9
==================|
_ _ * * * * * * * * 1 1 _ _ _ q=2 k=10
====================|
_ _ * * * * * * * * * 1 _ _ _ q=2 k=11
======================|
_ _ * * * * * * * * * * _ _ _ q=2 k=12
========================|
_ _ * * * * * * * * * * _ _ _ q=2 k=13
======================|
_ _ * * * * * * * * * * _ _ _ q=3 k=14
====================|
_ _ * * * * * * * * * * _ _ _ q=3 k=15
==================|
_ _ * * * * * * * * * * _ _ _ q=3 k=16
================|
_ _ * * * * * * * * * * _ _ _ q=3 k=17
==============|
_ _ * * * * * * * * * * _ _ _ q=3 k=18
============|
_ _ * * * * * * * * * * _ _ _ q=3 k=19
==========|
_ _ * * * * * * * * * * _ _ _ q=3 k=20
========|
_ _ * * * * * * * * * * _ _ _ q=3 k=21
======|
_ _ * * * * * * * * * * _ _ _ q=3 k=22
====|
_ _ * * * * * * * * * * _ _ _ q=3 k=23
==|
_ _ * * * * * * * * * * _ _ _ q=3 k=24
==|
Рис. 9. Замена единиц на звездочки
|
Задача 10.
На ленте МТ - последовательность _ABBAABAB____.
Головка МТ - напротив левого символа. Напишите программу,
чтобы МТ группировала символы "A" в правой части строки, а
вместо них ставила звездочки.
|
Программа для машины Тьюринга выглядит так:
q | "_" | "A" |
"B" | "*" | " | " |
1 | 1_R | 2*R |
1BR | 1*R | 1|S |
2 | 3|R | 2AR |
2BR | 2*R | 3|R |
3 | 4AL | 3AR |
| | |
4 | 1_R | 4AL |
4BL | 4*L | 4|L |
В компьютерную программу ПР-2 следует вставить код:
c=('_','A','B','B','A','A','B','A','B','_',
'_','_','_','_','_');
m:=1; q:= '1';
kom[1]:='1_>1_R';
kom[2]:='2_>3|R';
kom[3]:='3_>4AL';
kom[4]:= '4_>1_R';
kom[5]:='1A>2*R';
kom[6]:='2A>2AR';
kom[7]:='3A>3AR';
kom[8]:='4A>4AL';
kom[9]:='1B>1BR';
kom[10]:='2B>2BR';
kom[11]:='4B>4BL';
kom[12]:='1*>1*R';
kom[13]:='2*>2*R';
kom[14]:='4*>4*L';
kom[15]:='1|>1|S';
kom[16]:='2|>3|R';
kom[17]:='4|>4|L';
|
|
Результат работы программы -- на рис. 10.
_ A B B A A B A B _ _ _ _ _ _ q=1 k=1
==|
_ * B B A A B A B _ _ _ _ _ _ q=2 k=2
====|
_ * B B A A B A B _ _ _ _ _ _ q=2 k=3
======|
_ * B B A A B A B _ _ _ _ _ _ q=2 k=4
========|
_ * B B A A B A B _ _ _ _ _ _ q=2 k=5
==========|
_ * B B A A B A B _ _ _ _ _ _ q=2 k=6
============|
_ * B B A A B A B _ _ _ _ _ _ q=2 k=7
==============|
_ * B B A A B A B _ _ _ _ _ _ q=2 k=8
================|
_ * B B A A B A B _ _ _ _ _ _ q=2 k=9
==================|
_ * B B A A B A B | _ _ _ _ _ q=3 k=10
====================|
_ * B B A A B A B | A _ _ _ _ q=4 k=11
==================|
_ * B B A A B A B | A _ _ _ _ q=4 k=12
================|
. . . . . . . . . . . . . . .
_ * B B * * B * B | A A A A _ q=1 k=100
================|
_ * B B * * B * B | A A A A _ q=1 k=101
==================|
_ * B B * * B * B | A A A A _ q=1 k=102
==================|
Рис. 10. Группировка символов A
|
Задача 11.
На ленте МТ - число в десятичной системе счисления,
например, 134999. Напишите программу, увеличивающую это число на 1.
|
Программа для машины Тьюринга представлена в таблице:
q | "_" | "1" | "2" |
"3" | "4" | "5" | "6" | "7" |
"8" | "9" | "0" |
1 | 2_L | 11R | 12R |
13R | 14R | 15R | 16R | 17R |
18R | 19R | 10R |
2 | 21S | 22S | 23S |
24S | 25S | 26S | 27S | 28S |
29S | 20L | 21S |
В программу ПР-2 следует вставить код:
c=('_','1','3','4','9','9','9','_','_','_','_',
'_','_','_','_');
m:=2; q:= '1';
kom[1]:='1_>2_L';
kom[2]:='2_>2_S';
kom[3]:='11>11R';
kom[4]:='21>22S';
kom[5]:='12>12R';
kom[6]:='22>23S';
kom[7]:='13>13R';
kom[8]:='23>24S';
kom[9]:='14>14R';
kom[10]:='24>25S';
kom[11]:='15>15R';
kom[12]:='25>26S';
kom[13]:='16>16R';
kom[14]:='26>27S';
kom[15]:='17>17R';
kom[16]:='27>28S';
kom[17]:='18>18R';
kom[18]:='28>29S';
kom[19]:='19>19R';
kom[20]:='29>20L';
Результат работы программы -- на рис. 11.
|
|
_ 1 3 4 9 9 9 _ _ _ _ _ _ _ _ q=1 k=1
====|
_ 1 3 4 9 9 9 _ _ _ _ _ _ _ _ q=1 k=2
======|
_ 1 3 4 9 9 9 _ _ _ _ _ _ _ _ q=1 k=3
========|
_ 1 3 4 9 9 9 _ _ _ _ _ _ _ _ q=1 k=4
==========|
_ 1 3 4 9 9 9 _ _ _ _ _ _ _ _ q=1 k=5
============|
_ 1 3 4 9 9 9 _ _ _ _ _ _ _ _ q=1 k=6
==============|
_ 1 3 4 9 9 9 _ _ _ _ _ _ _ _ q=2 k=7
============|
_ 1 3 4 9 9 0 _ _ _ _ _ _ _ _ q=2 k=8
==========|
_ 1 3 4 9 0 0 _ _ _ _ _ _ _ _ q=2 k=9
========|
_ 1 3 4 0 0 0 _ _ _ _ _ _ _ _ q=2 k=10
======|
_ 1 3 5 0 0 0 _ _ _ _ _ _ _ _ q=2 k=11
======|
Рис. 11. Увеличение числа на 1.
Тексты программ находятся в zip-архиве,
файл gl-14.pas.
ВВЕРХ
Майер, Р. В. Задачи, алгоритмы, программы / Р. В. Майер [Электронный ресурс].
- Глазов: ГГПИ, 2012 //
Web-site http://maier-rv.glazov.net .
|