Хелпикс

Главная

Контакты

Случайная статья





Цель работы. Основные сведения из теории. Реализация алгоритма в табличной форме. Листингпрограммы



 

ГУАП

КАФЕДРА № 43

ОТЧЕТ
ЗАЩИЩЕН С ОЦЕНКОЙ

ПРЕПОДАВАТЕЛЬ

         
должность, уч. степень, звание   подпись, дата   инициалы, фамилия

 

ОТЧЕТ О ЛАБОРАТОРНОЙ РАБОТЕ №2
Изучение принципов функционирования машины Тьюринга
по дисциплине: ТЕОРИЯ ВЫЧИСЛИТЕЛЬНЫХ ПРОЦЕССОВ
   
 

РАБОТУ ВЫПОЛНИЛ

СТУДЕНТ ГР.       Р. В. Яровой
      подпись, дата   инициалы, фамилия

 

Санкт-Петербург2017


Цель работы

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

 

Основные сведения из теории

Основные понятия МТ:

1) Устройство управления УУ-> Ø ={q0, q1,..., qn}

2) Бесконечная лента, разбитая на ячейки в которых может быть забиты символы из

A = {a1, a2, …, an}

3) Списывание и записывание головки, в каждый момент времени обозревающей одну ячейку.

 

Принцип функционирования МТ:

 

В такт работы МТ находится в одном из своих дискретных состояний. Головка обозревает одну ячейку. Через такт времени машина переходит в новое состояние или остается в старом. В обозреваемую ячейку заносится новый символ. Головка переходит в лево или право на одну ячейку или остается на месте.

 

Реализация алгоритма в табличной форме

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

КлассTable

package src. main. java;

import java. util. HashMap;
import java. util. List;
import java. util. Map;

public class Table {
private Map< String, Integer> rows;
private Map< String, Integer> columns;
private String[][][] table;

public Table(List< String> rules) {
this. rows = new HashMap< > ();
   this. columns = new HashMap< > ();
String[] alphabet = rules. remove(0). split(" " );
String[] states = rules. remove(0). split(" " );
table = new String[alphabet. length][states. length][3];
   for (int j = 0; j < alphabet. length; j++)
rows. put(alphabet[j], j);
   for (int j = 0; j < states. length; j++)
columns. put(states[j], j);
String[] s;
   for (String rule: rules) {
       s = rule. split(" " );
table[rows. get(s[0])][columns. get(s[1])][0] = s[2];
table[rows. get(s[0])][columns. get(s[1])][1] = s[3];
table[rows. get(s[0])][columns. get(s[1])][2] = s[4];
}
}

public String[] getCeil(String row, String column){
return table[rows. get(row)][columns. get(column)];
}
}

 

КлассTrace

package src. main. java;

import java. io. FileWriter;
import java. io. IOException;

/**
 * Created by slava on 15. 10. 2017.
 */
public class Trace {
private FileWriter fw;
private int countWhiteSpaces;

public Trace(String outputFile) {
try {
fw = new FileWriter(outputFile, false);
} catch (IOException e) {
       e. printStackTrace();
}
}

public void run(Table table, String str) throws IOException {
char[] example = str. toCharArray();
String state = " q1";
String[] ceil;
   do {
fw. write(example);
ceil = table. getCeil(String. valueOf(example[countWhiteSpaces]), state);
example[countWhiteSpaces] = ceil[0]. charAt(0);
printWhiteSpaces(ceil[1]);
state = ceil[2];
} while (! state. equals(" stop" ));

}

private void printWhiteSpaces(String pattern) throws IOException {
if (pattern. equals(" > " )) {
fw. write(" \n" );
       for (int i = 0; i < countWhiteSpaces; i++) {
fw. write(" " );
}
fw. write(" ^\n" );
countWhiteSpaces++;
} else if (pattern. equals(" < " )) {
fw. write(" \n" );
       for (int i = 0; i < countWhiteSpaces; i++) {
fw. write(" " );
}
fw. write(" ^\n" );
countWhiteSpaces--;
}
fw. flush();
}
}

 

КлассMain

package src. main. java;

import java. io. IOException;
import java. nio. charset. StandardCharsets;
import java. nio. file. Files;
import java. nio. file. Paths;
import java. util. Arrays;
import java. util. HashSet;
import java. util. List;
import java. util. Set;
import java. util. stream. Collectors;

public class Main {
public static void main(String[] args) throws IOException {
   List< String> lines = Files. readAllLines(Paths. get(" rules. txt" ), StandardCharsets. UTF_8);
String example = lines. remove(0);
//----------------------
char[] chars = example. toCharArray();
Set< String> set = new HashSet< > ();
   for (int i = 0; i < chars. length; i++) {
       set. add(String. valueOf(chars[i]));
}
   String[] split = lines. get(0). split(" " );
HashSet< String> collect = Arrays. stream(split). collect(Collectors. toCollection(HashSet:: new));
set. removeAll(collect);
   if(set. size()! = 0){
       System. err. println(" Ошибка. Влентеприсутствсимволывнеалфавита! " );
}

//----------------------
Table table = new Table(lines);
Trace trace = new Trace(" trace. txt" );
trace. run(table, example);
}
}

 

 



  

© helpiks.su При использовании или копировании материалов прямая ссылка на сайт обязательна.