Скачиваний:
13
Добавлен:
01.05.2014
Размер:
122.37 Кб
Скачать

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

«Моделирование работы машины Тьюринга»

Цель работы: построение машины Тьюринга на языке Turbo Prolog, позволяющей реализовать заданную функцию.

Задание к работе: реализовать машину Тьюринга для функции

Выполнение работы:

Описание предикатов:

tu(integer, string, integer, integer, string, integer) – описывает команды машины Тьюринга. Первый параметр – текущее состояние, второй – наблюдаемый символ, третий – текущая позиция на ленте, четвертый – новое состояние, пятый – записываемый на ленту символ, шестой – новая позиция, полученная после перемещения считывающего устройства.

t(integer, string, integer) – организует общий вычислительный процесс. Первый параметр – текущая позиция на ленте, второй – строка символов, соответствующая записанной на ленте информации, третий – текущее состояние машины.

str(string, integer, string, string) – осуществляет процесс записи нового символа на ленту. В строке символов, которой соответствует первый параметр, в позиции, задаваемой вторым параметром, старый символ заменяется на символ, определяемый третьим параметром. Полученная после замены строка связывается с четвертым параметром.

sym(integer, string, string) – извлекает из строки, связанной со вторым параметром, символ, стоящий в позиции, определенной первым параметром, и присваивает его значение третьему параметру.

start – организует начало работы программы, ввод строки, соответствующей ленте машины в начальный момент времени.

Листинг программы:

predicates

tu(integer, string, integer, integer, string, integer)

t(integer, string, integer)

str(string, integer, string, string)

sym(integer, string, string)

start

clauses

sym(1, S0, S2) if

frontstr(1, S0, S2, _).

sym(N, S0, S2) if

N1 = N -1,

frontstr(N1,S0,_,R),

frontstr(1, R,S2,_).

str(S0,1,SR,Rez) if

frontchar(S0,_,R2),

concat(SR,R2,Rez).

str(S0,N,SR,Rez) if

N1 = N-1,

frontstr(N1,S0,S2,R),

frontchar(R,_,R2),

concat(S2,SR,R3),

concat(R3,R2,Rez).

/* вычисление x+y */

tu(-1," ",N,0," ",N1) if N1 = N+1.

tu(0,"1",N,1,"0",N1) if N1 = N+1.

tu(0," ",N,7," ",N1) if N1 = N+1.

tu(1,"1",N,1,"1",N1) if N1=N+1.

tu(1," ",N,2," ",N1) if N1=N+1.

tu(2,"1",N,2,"1",N1) if N1=N+1.

tu(2," ",N,3," ",N1) if N1=N+1.

tu(3," ",N,4,"1",N1) if N1=N-1.

tu(3,"1",N,3,"1",N1) if N1=N+1.

tu(4,"1",N,4,"1",N1) if N1=N-1.

tu(4," ",N,5," ",N1) if N1=N-1.

tu(5,"1",N,5,"1",N1) if N1=N-1.

tu(5," ",N,6," ",N1) if N1=N-1.

tu(5,"0",N,7,"1",N1) if N1=N+1.

tu(6,"1",N,6,"1",N1) if N1=N-1.

tu(6,"0",N,0,"1",N1) if N1=N+1.

tu(7,"1",N,2,"0",N1) if N1=N+1.

tu(7," ",N,8," ",N1) if N1=N+1.

tu(8,"1",N,8,"1",N1) if N1=N-1.

tu(8," ",N,9," ",N1) if N1=N-1.

/* вычисление (x+y)*y */

tu(9,"1",N,9,"1",N1) if N1=N-1.

tu(9," ",N,10," ",N1) if N1=N+1.

tu(10,"1",N,11,"1",N1) if N1=N+1.

tu(11,"1",N,12,"0",N1) if N1=N+1.

tu(11," ",N,20," ",N1) if N1=N+1.

tu(12,"1",N,12,"1",N1) if N1=N+1.

tu(12," ",N,13," ",N1) if N1=N+1.

tu(13,"1",N,14,"0",N1) if N1=N+1.

tu(13," ",N,18," ",N1) if N1=N-1.

tu(14,"1",N,14,"1",N1) if N1=N+1.

tu(14," ",N,15," ",N1) if N1=N+1.

tu(15," ",N,16,"1",N1) if N1=N-1.

tu(15,"1",N,15,"1",N1) if N1=N+1.

tu(16,"1",N,16,"1",N1) if N1=N-1.

tu(16," ",N,17," ",N1) if N1=N-1.

tu(17,"1",N,17,"1",N1) if N1=N-1.

tu(17,"0",N,13,"1",N1) if N1=N+1.

tu(18,"1",N,18,"1",N1) if N1=N-1.

tu(18," ",N,19," ",N1) if N1=N-1.

tu(19,"1",N,19,"1",N1) if N1=N-1.

tu(19,"0",N,11,"1",N1) if N1=N+1.

tu(20,"1",N,20,"1",N1) if N1=N+1.

tu(20," ",N,21," ",N1) if N1=N+1.

tu(21,"1",N,21,"1",N1) if N1=N+1.

tu(21," ",N,22," ",N1) if N1=N-1.

tu(22,"1",N,23," ",N1) if N1=N-1.

tu(22," ",N,24," ",N1) if N1=N-1.

tu(23," ",N,24,"1",N1) if N1=N-1.

tu(23,"1",N,23,"1",N1) if N1=N-1.

tu(24,"1",N,24,"1",N1) if N1=N-1.

tu(24," ",N,25," ",N1) if N1=N+1.

/* вычисление x*x */

tu(25,"1",N,25,"1",N1) if N1=N-1.

tu(25," ",N,26," ",N1) if N1=N-1.

tu(26,"1",N,26,"1",N1) if N1=N-1.

tu(26," ",N,27," ",N1) if N1=N-1.

tu(27,"1",N,27,"1",N1) if N1=N-1.

tu(27," ",N,28," ",N1) if N1=N+1.

tu(28,"1",N,29,"0",N1) if N1=N+1.

tu(28," ",N,37," ",N1) if N1=N-1.

tu(29,"1",N,29,"1",N1) if N1=N+1.

tu(29," ",N,30," ",N1) if N1=N+1.

tu(30,"1",N,30,"1",N1) if N1=N+1.

tu(30," ",N,31," ",N1) if N1=N+1.

tu(31,"1",N,31,"1",N1) if N1=N+1.

tu(31," ",N,32," ",N1) if N1=N+1.

tu(32," ",N,33,"1",N1) if N1=N-1.

tu(32,"1",N,32,"1",N1) if N1=N+1.

tu(33," ",N,34," ",N1) if N1=N-1.

tu(33,"1",N,33,"1",N1) if N1=N-1.

tu(34,"1",N,34,"1",N1) if N1=N-1.

tu(34," ",N,35," ",N1) if N1=N-1.

tu(35,"1",N,35,"1",N1) if N1=N-1.

tu(35," ",N,36," ",N1) if N1=N-1.

tu(36,"1",N,36,"1",N1) if N1=N-1.

tu(36,"0",N,28,"1",N1) if N1=N+1.

tu(37,"1",N,37,"1",N1) if N1=N-1.

tu(37," ",N,38," ",N1) if N1=N+1.

tu(38,"1",N,39,"1",N1) if N1=N+1.

tu(39,"1",N,40,"0",N1) if N1=N+1.

tu(39," ",N,52," ",N1) if N1=N+1.

tu(40,"1",N,40,"1",N1) if N1=N+1.

tu(40," ",N,41," ",N1) if N1=N+1.

tu(41,"1",N,41,"1",N1) if N1=N+1.

tu(41," ",N,42," ",N1) if N1=N+1.

tu(42,"1",N,42,"1",N1) if N1=N+1.

tu(42," ",N,43," ",N1) if N1=N+1.

tu(43,"1",N,44,"0",N1) if N1=N+1.

tu(43," ",N,48," ",N1) if N1=N-1.

tu(44,"1",N,44,"1",N1) if N1=N+1.

tu(44," ",N,45," ",N1) if N1=N+1.

tu(45," ",N,46,"1",N1) if N1=N-1.

tu(45,"1",N,45,"1",N1) if N1=N+1.

tu(46," ",N,47," ",N1) if N1=N-1.

tu(46,"1",N,46,"1",N1) if N1=N-1.

tu(47,"1",N,47,"1",N1) if N1=N-1.

tu(47,"0",N,43,"1",N1) if N1=N+1.

tu(48,"1",N,48,"1",N1) if N1=N-1.

tu(48," ",N,49," ",N1) if N1=N-1.

tu(49,"1",N,49,"1",N1) if N1=N-1.

tu(49," ",N,50," ",N1) if N1=N-1.

tu(50,"1",N,50,"1",N1) if N1=N-1.

tu(50," ",N,51," ",N1) if N1=N-1.

tu(51,"1",N,51,"1",N1) if N1=N-1.

tu(51,"0",N,39,"1",N1) if N1=N+1.

tu(52,"1",N,52,"1",N1) if N1=N+1.

tu(52," ",N,53," ",N1) if N1=N+1.

tu(53,"1",N,53,"1",N1) if N1=N+1.

tu(53," ",N,54," ",N1) if N1=N+1.

tu(54,"1",N,54,"1",N1) if N1=N+1.

tu(54," ",N,55," ",N1) if N1=N+1.

tu(55,"1",N,55,"1",N1) if N1=N+1.

tu(55," ",N,56," ",N1) if N1=N-1.

tu(56,"1",N,57," ",N1) if N1=N-1.

tu(56," ",N,59," ",N1) if N1=N-1.

tu(57,"1",N,57,"1",N1) if N1=N-1.

tu(57," ",N,58,"1",N1) if N1=N-1.

tu(58,"1",N,58,"1",N1) if N1=N-1.

tu(58," ",N,59," ",N1) if N1=N+1.

/* деление числителя на знаменатель */

tu(59,"1",N,60,"0",N1) if N1=N-1.

tu(60," ",N,61," ",N1) if N1=N-1.

tu(60,"0",N,60,"0",N1) if N1=N-1.

tu(61,"1",N,61,"1",N1) if N1=N-1.

tu(61," ",N,62," ",N1) if N1=N+1.

tu(61,"0",N,62,"0",N1) if N1=N+1.

tu(62,"1",N,63,"0",N1) if N1=N+1.

tu(62," ",N,68," ",N1) if N1=N+1.

tu(63,"1",N,63,"1",N1) if N1=N+1.

tu(63," ",N,64," ",N1) if N1=N+1.

tu(64,"0",N,64,"0",N1) if N1=N+1.

tu(64,"1",N,60,"0",N1) if N1=N-1.

tu(64," ",N,65," ",N1) if N1=N+1.

tu(65," ",N,66,"1",N1) if N1=N-1.

tu(65,"1",N,65,"1",N1) if N1=N+1.

tu(66,"1",N,66,"1",N1) if N1=N-1.

tu(66," ",N,67," ",N1) if N1=N-1.

tu(67,"0",N,67,"1",N1) if N1=N-1.

tu(67," ",N,59," ",N1) if N1=N+1.

tu(68,"0",N,68,"1",N1) if N1=N+1.

tu(68,"1",N,68,"1",N1) if N1=N+1.

tu(68," ",N,69," ",N1) if N1=N+1,!.

t(_,S,69) if

field_str(5,1,50,S),

field_str(6,1,3,"End"),

readchar(_),

exit.

t(N,S,Q) if

field_str(0,1,50,S),

scr_char(2,N,'^'),

str_int(St,Q),

field_str(12,0,5,St),

sym(N,S,S2),

tu(Q,S2,N,Qr,S2r,Nr),

str(S,N,S2r,Rez),

readchar(_),

scr_char(2,N,' '),

t(Nr,Rez,Qr).

start if

field_str(8,0,50," (x+y)*y "),

field_str(9,0,50,"f(x,y) = ---------"),

field_str(10,0,50," x*x "),

write("Введите начальную строку ->\n"), readln(Str),

scr_char(0,0,' '),

field_str(1,0,50," "),

t(1,Str,-1).

goal

start.

Работа программы:

Для начала работы программы необходимо запустить исполняемый файл и ввести исходное состояние ленты машины Тьюринга – через пробелы вводятся значения параметров функции:

При нажатии кнопки Enter начинается работа машины Тьюринга и после окончания её работы выводится лента машины:

на ленте после окончания деления через пробел записаны: значение параметра x, значение параметра y, значение числителя функции, значение знаменателя функции, результат функции.

Вывод: в данной лабораторной работе было произведено моделирование работы машины Тьюринга на языке Turbo Prolog. В ходе выполнения работы были получены навыки по проектирования системы команд машины для реализации вычисления значения заданной функции и её реализации.

7

Соседние файлы в папке Лабораторные работа на Turbo Prolog