Контрольная работа по предмету "Информатика, программирование"


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

Саратовский государственный технический университет


Кафедра «Системотехника»


Расчетно-графическая работа


по математической логике


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


Выполнил:


студент группы АСУ-21


Мустафин Ш. Р.


Проверил:


преподаватель


Минаев С.В.


Саратов 2010



Цель


Изучение принципов работы машины Тьюринга, приобретение практических навыков программирования машины Тьюринга.


Задание


Изучить правила написания алгоритмов на эмуляторе машины Тьюринга;


Получить у преподавателя вариант задания для реализации алгоритма;


Разработать алгоритм в соответствии с полученным заданием;


Отладить написанный алгоритм на эмуляторе машины Тьюринга.


Задача


Сложение нескольких чисел в двоичной системе.


Описание метода решения


Для более удобной реализации алгоритма на эмуляторе, сложение будет выполняться поэтапно. Сначала будем складывать два первых слагаемых, затем результат этого сложения с третьим и так далее, пока не дойдем до знака «=». Первым шагом ищется самый младший, неиспользованный разряд первого слагаемого. В зависимости от его значения переходим в следующие соответствующие состояния. Далее ищем самый младший, неиспользованный разряд второго слагаемого и записываем на его место результат сложения этих двух разрядов. Затем снова возвращаемся на первый шаг. Этот цикл осуществляется до тех пор, пока у одного из слагаемых не кончатся разряды. Записываем оставшиеся старшие разряды к результату, с учетом переноса, если он есть. Стираем лишние символы, находящиеся до старших разрядов результата. Проверяем какой знак стоит после результата. Если «+», то возвращаемся к первому шагу, если «=», то конец подсчетам.


Описание программы


Для удобства в программе все 1 и 0 заменяются на I и O соотвественно. Далее состояние q5 доходит до + и переходит в состояние q6, в зависимости от того, какой символ стоит перед + q6 переходит в q16 – i, q15 – o. q16, q7, q9 – это состояния которые несут единицу во второе слагаемое без переноса, и в зависимости от значения, записывают в самый младший, неиспользованный разряд результат сложения. Если переноса нет, то переходим в состояние q11, есть – q10. Q11,q13 – бегут к первому слагаемому и анализируют самый младший, неиспользованный разряд и в зависимости от значения переходят в состояния q16 и q15, если разрядов нету, то в q14. Q14 и q17 затирают ненужные символы и переходят в состояние q6. Q15, q37,q39 - это состояния которые несут ноль во второе слагаемое без переноса, и в зависимости от значения, записывают в самый младший, неиспользованный разряд результат сложения и переходят в состояние q11. Q10,q23 – бегут с переносом к первому слагаемому и анализируют самый младший, неиспользованный разряд и в зависимости от значения переходят в состояния q16 и q26, если разрядов нету, то в q24. Q26 аналог q15, только несет значение 0 с переносом. Q24 аналог q14, но с учетом переноса. Программа останавливается, когда одно из состояний, преобразую частичную сумму, после младшего разряда находит символ «=».



Алгоритм решения




Код программы


[MoT Data]


1110111+111111+10101010101010101010+…++11=


q1s q1s dR


q1s1q1sidR


q1s0q1sodR


q1s+q1s+dR


q1s=q2s=dL


q2siq2sidL


q2soq2sodL


q2s+q2s+dL


q2s q5s dR


q5s q5s dR


q5siq5sidR


q5soq5sodR


q5s+q6s+dL


q5s=q100s=dE


q6siq16s*dR (если цифра первого слагаемого 1 без переноса)


q6soq15s*dR ( если цифра первого слагаемого 0 без переноса)


q16s+q16s+dR


q16s*q16s*dR


q16siq7sidR


q16soq7sodR(проход по звездочкам и + до еденичек или и и о)


q16s1q40s1dL


q16s0q40s0dL


q40s+q12s1dL(q12 когда разряды кончились во втором слагаемом)


q7siq7sidR


q7soq7sodR


q7s+q9s+dL(q7 и q9 - несу 1 без переноса )


q7s1q9s1dL


q7s0q9s0dL


q7s=q9s=dL


q9siq10s0dL (q10 - c переносом единичкой)


q9soq11s1dL (q11 без переноса )


q9s+q12s1dE (q12 когда разряды кончились во втором слагаемом без переноса)


q11siq11sidL


q11soq11sodL(бежит назад без переноса )


q11s+q11s+dL


q11s*q13s*dL


q13s*q13s*dL


q13siq16s*dR


q13soq15s*dR


q13s q14s dR( q14 если разряды закончились в первом слагаемом без переноса )


q14s q14s dR


q14s*q14s dR (восстановления числа в i и o )


q14s+q14s dR


q14siq14sidR


q14soq14sodR


q14s1q17s1dE


q14s0q17s0dE


q17s1q17sidR


q17s0q17sodR(вернуться в q6 после воосстановления)


q17s+q6s+dL


q17s=q100s=dE


q12s*q12s*dL(записать число без переноса )


q12s q21s dR


q12siq18s*dR


q12soq19s*dR


q18s*q18s*dR(нести единицу к цифрам через + и *)


q18s+q18s+dR


q18s1q20s1dL


q18s0q20s0dL


q20s+q12s1dL


q20s*q12s1dL


q19s*q19s*dR


q19s+q19s+dR (нести 0)


q19s1q22s1dL


q19s0q22s0dL


q22s+q12s0dL


q22s*q12s0dL


q21s q21s dR


q21s*q21s dR (q21 - шагает вправо стирает * и делает 1 и 0 - i и o до + или =)


q21siq21sidR


q21soq21sodR


q21s1q21sidR


q21s0q21sodR


q21s+q6s+dL


q21s=q100s=dE


q10siq10sidL (бежит назад с переносом )


q10soq10sodL


q10s+q10s+dL


q10s*q23s*dL


q23s*q23s*dL (бежит назад c переносом )


q23siq26s*dR


q23soq16s*dE


q23s q24s dR


q26s+q26s+dR проход по звездочкам и + до еденичек или и и о)


q26s*q26s*dR


q26siq25sidR


q26soq25sodR


q26s1q43s1dL


q26s0q43s0dL


q43s+q27s0dL


q25siq25sidR (q25 несу с переносом )


q25soq25sodR


q25s+q28s+dL


q25s1q28s1dL


q25s0q28s0dL


q25s=q28s=dL


q28siq10s1dL(q10 - c переносом единичкой)


q28soq10s0dL


q28s+q27s0dL


q24s*q24s dR


q24s+q24s dR ( q24 если разряды закончились в первом слагаемом с переносом)


q24siq24sidR


q24soq24sodR (восстановления числа в i и o )


q24s1q29s1dL


q24s0q29s0dL


q29siq29s0dL


q29soq30sodE


q29s q30s dE


q30soq17s1dE


q30s q17s1dE


q27s*q27s*dL (q27? когда разряды кончились во втором слагаемом с переносом)


q27s q31s dR


q27siq32s*dR


q27soq33s*dR


q32s*q32s*dR(нести единицу к цифрам через + и *)


q32s+q32s+dR


q32s1q34s1dL


q32s0q34s0dL


q34s+q27s0dL


q34s*q27s0dL


q33s*q33s*dR (нести 0)


q33s+q33s+dR


q33s1q35s1dL


q33s0q35s0dL


q35s+q12s1dL


q35s*q12s1dL


q31s*q31s*dR(q31 - шагает вправо стирает * и делает 1 и 0 - i и o до + или = надо дорисовать 1)


q31s0q36s0dL


q31s1q36s1dL


q36s*q21s1dL


q15s+q15s+dR


q15s*q15s*dR


q15siq37sidR


q15soq37sodR


q15s1q42s1dL


q15s0q42s0dL


q42s+q12s0dL


q37s*q37s*dR


q37siq37sidR


q37soq37sodR


q37s+q39s+dL


q37s1q39s1dL


q37s0q39s0dL


q37s=q39s=dL


q39siq11s1dL


q39soq11s0dL


q39s+q12s0dL


q100s=q100s=dL


q100siq100s1dL


q100soq100s0dL


q100s qz



Вывод


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



Не сдавайте скачаную работу преподавателю!
Данную контрольную работу Вы можете использовать для выполнения своих заданий.

Поделись с друзьями, за репост + 100 мильонов к студенческой карме :