Автор: Пользователь скрыл имя, 21 Апреля 2013 в 09:41, курсовая работа
Машина Тьюринга называется детерминированной, если каждой комбинации состояния и ленточного символа в таблице соответствует не более одного правила, и недетерминированной в противном случае.
Цель – сформировать формальное определение и написать программную реализацию машины Тьюринга, распознающей язык L = {wÎ{0, 1}* │w не содержит 2-х идущих подряд нулей}
Результат – формальное определение, программная реализация машины Тьюринга, распознающей язык L = {wÎ{0, 1}* │w не содержит 2-х идущих подряд нулей}
Ведение………………………………………………………………...4
ПОСТАНОВКА ЗАДАЧИ……………………………………….........6
ФОРМАЛЬНО ОПРЕДЕЛЕНИЕ МАШИНЫ ТЬЮРИНГА………..7
ПРОГРАММНАЯ МОДЕЛЬ МАШИНЫ ТЬЮРИНГА……….........8
ПРОТОКОЛЫ РАБОТЫ МАШИНЫ ТЬЮРИНГА……...................22
ВЫВОД………………………………………………………………..23
СПИСОК ЛИТЕРАТУРЫ…………………….………..………...... 25
Приложение А……………………………………………………....... 25
Приложение Б………………………………………………………....27
11.Экранные формы программы………………………… …………....27
}
return true;
}
function tmStart() {
var ids = ["btnStep", "btnStart", "btnSetState", "btnSetConfig", "btnShowNextCommand"];
for(var i = 0; i < ids.length; i++)
document.getElementById(ids[i]
document.getElementById("
flTMDoStop = false;
tmShowNextCommand();
window.setTimeout(
}
function tmRepeatStep() {
if(!flTMDoStop && tmStep()) {
tmShowNextCommand();
window.setTimeout(
return;
}
document.getElementById("
var ids = ["btnStep", "btnStart", "btnSetState", "btnSetConfig", "btnShowNextCommand"];
for(var i = ids.length; i--; )
document.getElementById(ids[i]
}
function tmStop() {
flTMDoStop = true;
}
function tmSetAlphabet() {
tmClearErrors();
var alphabet = {};
alphabet['B'] = 'B';
var ids = (chkDigitIds + " " + chkAlphaIds + " " + chkSymbolIds).split(" ");
var smbs = (smbDigit + smbAlpha + smbSymbol);
for(var i = 0; i < ids.length; i++)
if(document.getElementById("
alphabet[smbs.charAt(i)] = smbs.charAt(i);
for(var i = 0; i < nExtraSymbolNumber; i++) {
var smb = document.getElementById("
if(!smb)
continue;
if(smb in alphabet)
return tmCompileError("Невозможно включить символ '" + smb +
"' в алфавит дважды");
if(smb.length != 1)
return tmCompileError("Невозможно включить в алфавит " + smb.length + "-буквенное слово '" + smb + "'");
alphabet[smb] = smb;
}
setTMAlphabet = alphabet;
return true;
}
function tmSetStates() {
tmClearErrors();
var states = {};
states['STOP'] = 'STOP';
var ids = chkStateIds.split(" ");
for(var i = 0; i < ids.length; i++)
if(document.getElementById("
states[stState[i]] = stState[i];
for(var i = 0; i < nExtraStateNumber; i++) {
var st = document.getElementById("
if(!st)
continue;
if(st in states)
return tmCompileError("Невозможно включить состояние '" + st +
"' в множество состояний машины Тьюринга дважды");
// if(!st.match(/^[a-zA-Z0-9][a-
if(!st.match(/^[a-zA-Z0-9][^\
return tmCompileError("Некорректное имя для состояния: '" + st + "'");
states[st] = st;
}
setTMStates = states;
return true;
}
function tmAddStateInput(trParent, tdBefore) {
var td = document.createElement("td");
var input = document.createElement("input"
input.setAttribute("type", "textbox");
input.setAttribute("id", "extraState" + nExtraStateNumber++);
input.setAttribute("class", "extraState");
td.appendChild(input);
if(tdBefore)
td = trParent.insertBefore(td, tdBefore);
else
td = trParent.appendChild(td);
td.firstChild.className = "extraState";
return td;
}
function tmMoreStates() {
var tdMoreStates = document.getElementById("
var parent = tdMoreStates.parentNode;
var colsNumber = Math.ceil(nExtraStateNumber / 10) + 4;
var percentWidth = Math.floor(100 / colsNumber);
for(var td = parent.firstChild; td != tdMoreStates; td = td.nextSibling)
if(td.nodeName.toLowerCase() == "td")
td.setAttribute("width", percentWidth + "%");
tdMoreStates.setAttribute("
var tdStateInput = tmAddStateInput(parent, tdMoreStates);
tdStateInput.setAttribute("
for(var tr = parent.nextSibling; tr; tr = tr.nextSibling)
if(tr.nodeName.toLowerCase() == "tr")
var td = tmAddStateInput(tr);
}
function tmShowNextCommand() {
tmClearNextCommand();
var prefix = "" + tmGetCellValue(
if(!setTMProgram || !(prefix in setTMProgram))
return;
var cmd = setTMProgram[prefix];
var txt = prefix + "->" + cmd.smbTo + cmd.stTo + cmd.mvTo;
var tn = document.createTextNode(txt);
ctlNextCommand.appendChild(tn)
}
function tmClearNextCommand() {
while(ctlNextCommand.
ctlNextCommand.removeChild(
}
function btnShowNextCommand_click() {
tmClearNextCommand();
var text = ctlProgram.value;
if(!(tmSetAlphabet() && tmSetStates()))
return;
if(!tmSetState(
return;
if(tmCompile(text))
tmShowNextCommand();
}
function btnStep_click() {
tmClearNextCommand();
var text = ctlProgram.value;
if(!(tmSetAlphabet() && tmSetStates()))
return;
if(!tmSetState(
return;
if(tmCompile(text) && tmStep())
tmShowNextCommand();
}
function btnStart_click() {
tmClearNextCommand();
var text = ctlProgram.value;
if(!(tmSetAlphabet() && tmSetStates()))
return;
if(!tmSetState(
return;
if(tmCompile(text))
tmStart();
}
function btnStop_click() {
tmStop();
}
function btnSetConfig_click() {
tmClearNextCommand();
var strConfig = ctlConfig.value;
if(tmSetAlphabet() && tmSetConfig(strConfig))
tmShowNextCommand();
}
function btnSetState_click() {
tmClearNextCommand();
var strState = ctlNewState.value;
if(tmSetStates() && tmSetState(strState))
tmShowNextCommand();
}
function ctlTape_click(n) {
if(flTMDoStop) {
tmFocusCell(n);
tmShowNextCommand();
}
}
function chkAllDigit_click(checked) {
var ids = chkDigitIds.split(" ");
for(var i = 0; i < ids.length; i++)
document.getElementById("
}
function chkAllAlpha_click(checked) {
var ids = chkAlphaIds.split(" ");
for(var i = 0; i < ids.length; i++)
document.getElementById("
}
function chkAllSymbol_click(checked) {
var ids = chkSymbolIds.split(" ");
for(var i = 0; i < ids.length; i++)
document.getElementById("
}
</script>
<body onload="init()">
<span id="ctlNBSP"> </span>
<div class="next-command-container"
<h1> Следующая команда </h1>
<div id="ctlNextCommand"></div>
</div>
<div class="state-container">
<h1> Текущее состояние </h1>
<div id="state"></div>
</div>
<div id="ctlTapeContainer">
<table id="ctlTape">
<tr id="tape"></tr>
</table>
</div>
<div class="program-container">
<input type="button"
id="btnShowNextCommand"
value="Показать следующую команду"
onclick="btnShowNextCommand_
<input type="button"
id="btnStep"
value="Шаг"
onclick="btnStep_click()"/>
<input type="button"
value="Старт"
id="btnStart"
onclick="btnStart_click()"/>
Скорость
<select id="speed">
<option value="0"/>Мгновенно
<option value="50"/>Очень быстро
<option value="200"/>Быстро
<option value="500" selected="true"/>Неспешно
<option value="1000"/>Медленно
<option value="5000"/>Очень медленно
</select>
<input type="button"
value="Стоп"
id="btnStop"
disabled="true"
onclick="btnStop_click()"/>
<table width="50%"
class="definitions"
cellpadding="4">
<tr>
<td width="50%">
<h2>Состояние</h2>
<input type="textbox"
id="newState"
value="q1"/><br/>
<input type="button"
value="Установить"
id="btnSetState"
onclick="btnSetState_click()"/
</td>
<td colspan="2"
width="50%">
<h2>Конфигурация</h2>
<input type="textbox"
id="config"
value="01000"/>
<br/>
<input type="button"
value="Установить"
id="btnSetConfig"
onclick="btnSetConfig_click()"
</td>
<h2>Множество состояний</h2>
<table width="50%"
class="states">
<tr>
<td width="25%"><input type="checkbox"
checked="true" disabled="true"/>STOP</td>
<td width="25%"><input type="checkbox" id="stateQ10"/>q10</td>
<td width="25%"><input type="textbox" id="extraState0" class="extraState"/></td>
</tr>
<tr>
<td><input type="checkbox" id="stateQ1" checked="true"/>q1</td>
<td><input type="checkbox" id="stateQ11"/>q11</td>
<td><input type="textbox" id="extraState1" class="extraState"/></td>
</tr>
<tr>
<td><input type="checkbox" id="stateQ2" checked="true"/>q2</td>
<td><input type="checkbox" id="stateQ12"/>q12</td>
<td><input type="textbox" id="extraState2" class="extraState"/></td>
</tr>
<tr>
<td><input type="checkbox" id="stateQ3" checked="true"/>q3</td>
<td><input type="checkbox" id="stateQ13"/>q13</td>
<td><input type="textbox" id="extraState3" class="extraState"/></td>
</tr>
<tr>
<td><input type="checkbox" id="stateQ4"/>q4</td>
<td><input type="checkbox" id="stateQ14"/>q14</td>
<td><input type="textbox" id="extraState4" class="extraState"/></td>
</tr>
<tr>
<td><input type="checkbox" id="stateQ5"/>q5</td>
<td><input type="checkbox" id="stateQ15"/>q15</td>
<td><input type="textbox" id="extraState5" class="extraState"/></td>
</tr>
<tr>
<td><input type="checkbox" id="stateQ6"/>q6</td>
<td><input type="checkbox" id="stateQ16"/>q16</td>
<td><input type="textbox" id="extraState6" class="extraState"/></td>
</tr>
<tr>
<td><input type="checkbox" id="stateQ7"/>q7</td>
<td><input type="checkbox" id="stateQ17"/>q17</td>
<td><input type="textbox" id="extraState7" class="extraState"/></td>
</tr>
<tr>
<td><input type="checkbox" id="stateQ8"/>q8</td>
<td><input type="checkbox" id="stateQ18"/>q18</td>
<td><input type="textbox" id="extraState8" class="extraState"/></td>
</tr>
<tr>
<td><input type="checkbox" id="stateQ9"/>q9</td>
<td><input type="checkbox" id="stateQ19"/>q19</td>
<td><input type="textbox" id="extraState9" class="extraState"/></td>
</tr>
</table>
<h2>Алфавит</h2>
<table
width="50%"
class="alphabet">
<tr>
<td width="33%"
style="font-family: sans-serif;"
colspan="2">
<input type="checkbox"
id="allDigit"
onclick="chkAllDigit_click(
Цифры
</td>
<td width="33%"
style="font-family: sans-serif;"
colspan="2">
<input type="checkbox"
id="allAlpha"
onclick="chkAllAlpha_click(
Буквы
</td>
<td width="34%"
style="font-family: sans-serif;"
colspan="2">
<input type="checkbox"
id="allSymbol"
onclick="chkAllSymbol_click(
Символы
</td>
</tr>
<tr>
<td><input type="checkbox" id="symbol0" checked="true"/>0</td>
<td><input type="checkbox" id="symbolA"/>a</td>
<td><input type="checkbox" id="symbolK"/>k</td>
<td><input type="checkbox" id="symbolU"/>u</td>
<td><input type="checkbox" checked="true" disabled="true"/>B</td>
<td><input type="textbox" id="extraSymbol0"/></td>
</tr>
<tr>
<td><input type="checkbox" id="symbol1" checked="true"/>1</td>
<td><input type="checkbox" id="symbolB"/>b</td>
<td><input type="checkbox" id="symbolL"/>l</td>
<td><input type="checkbox" id="symbolV"/>v</td>
<td><input type="checkbox" id="symbolLess"/><</td>
<td><input type="textbox" id="extraSymbol1"/></td>
</tr>
<tr>
<td><input type="checkbox" id="symbol2"/>2</td>
<td><input type="checkbox" id="symbolC"/>c</td>
<td><input type="checkbox" id="symbolM"/>m</td>
<td><input type="checkbox" id="symbolW"/>w</td>
<td><input type="checkbox" id="symbolGreater"/>></td>
<td><input type="textbox" id="extraSymbol2"/></td>
</tr>
<tr>
<td><input type="checkbox" id="symbol3"/>3</td>
<td><input type="checkbox" id="symbolD"/>d</td>
<td><input type="checkbox" id="symbolN"/>n</td>
<td><input type="checkbox" id="symbolX"/>x</td>
<td><input type="checkbox" id="symbolEqual"/>=</td>
<td><input type="textbox" id="extraSymbol3"/></td>
</tr>
<tr>
<td><input type="checkbox" id="symbol4"/>4</td>
<td><input type="checkbox" id="symbolE"/>e</td>
<td><input type="checkbox" id="symbolO"/>o</td>
<td><input type="checkbox" id="symbolY"/>y</td>
<td><input type="checkbox" id="symbolPlus"/>+</td>
<td><input type="textbox" id="extraSymbol4"/></td>
</tr>
<tr>
<td><input type="checkbox" id="symbol5"/>5</td>
<td><input type="checkbox" id="symbolF"/>f</td>
<td><input type="checkbox" id="symbolP"/>p</td>
<td><input type="checkbox" id="symbolZ"/>z</td>
<td><input type="checkbox" id="symbolMinus"/>-</td>
<td><input type="textbox" id="extraSymbol5"/></td>
</tr>
<tr>
<td><input type="checkbox" id="symbol6"/>6</td>
<td><input type="checkbox" id="symbolG"/>g</td>
<td><input type="checkbox" id="symbolQ"/>q</td>
<td><input type="textbox" id="extraSymbol10"/></td>
<td><input type="checkbox" id="symbolStar"/>*</td>
<td><input type="textbox" id="extraSymbol6"/></td>
</tr>
<tr>
<td><input type="checkbox" id="symbol7"/>7</td>
<td><input type="checkbox" id="symbolH"/>h</td>
<td><input type="checkbox" id="symbolR"/>r</td>
<td><input type="textbox" id="extraSymbol11"/></td>
<td><input type="checkbox" id="symbolSlash"/>/</td>
<td><input type="textbox" id="extraSymbol7"/></td>
</tr>
<tr>
<td><input type="checkbox" id="symbol8"/>8</td>
<td><input type="checkbox" id="symbolI"/>i</td>
<td><input type="checkbox" id="symbolS"/>s</p></td>
<td><input type="textbox" id="extraSymbol12"/></td>
<td><input type="checkbox" id="symbolHat"/>^</td>
<td><input type="textbox" id="extraSymbol8"/></td>
</tr>
<tr>
<td><input type="checkbox" id="symbol9"/>9</td>
<td><input type="checkbox" id="symbolJ"/>j</td>
<td><input type="checkbox" id="symbolT"/>t</td>
<td><input type="textbox" id="extraSymbol13"/></td>
<td><input type="checkbox" id="symbolPercent"/>%</td>
<td><input type="textbox" id="extraSymbol9"/></td>
</tr>
</table>
</td>
<td width="50%">
<h2>Команды</h2>
<textarea
id="program"
wrap="off">
// Не содержит 2-х подряд нулей
1q1->1q1R
0q1->0q2R
1q2->1q1R
Bq1->BSTOP
Bq2->BSTOP
</textarea>
</td>
</tr>
</table>
<div class="error-container">
<nobr id="errorType"></nobr>
<br>
<nobr id="errorMessage"></nobr>
</div>
<div class="copy">
© Силиванова В.А. , 2012–
</div>
</div>
<body>
</html>
</font>
4 ПРОТОКОЛЫ РАБОТЫ МАШИНЫ ТЬЮРИНГА
// Не содержит 2-х подряд нулей
1q1->1q1R
0q1->0q2R
1q2->1q1R
Bq1->BSTOP
Bq2->BSTOP
ВЫВОДЫ
Машина Тьюринга (МТ) — абстрактный исполнитель (абстрактная вычислительная машина). Была предложена Аланом Тьюрингом в 1936 году для формализации понятия алгоритма.
Машина Тьюринга является расширением конечного автомата и, согласно тезису Чёрча — Тьюринга, способна имитировать все другие исполнители (с помощью задания правил перехода), каким-либо образом реализующие процесс пошагового вычисления, в котором каждый шаг вычисления достаточно элементарен.
В состав машины Тьюринга входит бесконечная в обе стороны лента (возможны машины Тьюринга, которые имеют несколько бесконечных лент), разделённая на ячейки, и управляющее устройство, способное находиться в одном из множества состояний. Число возможных состояний управляющего устройства конечно и точно задано.
Управляющее устройство может перемещаться влево и вправо по ленте, читать и записывать в ячейки ленты символы некоторого конечного алфавита. Выделяется особый пустой символ, заполняющий все клетки ленты, кроме тех из них (конечного числа), на которых записаны входные данные.