Разработка программной модели машины Тьюринга
Автор: qwertyaz4321 • Май 13, 2023 • Контрольная работа • 3,109 Слов (13 Страниц) • 172 Просмотры
Индивидуальное задание № 4 Разработка программной модели машины Тьюринга
Грибанов Сергей Павлович
Ктбо1-6
- Построить систему команд машины Тьюринга, решающей поставленную задачу: На входной ленте машины Тьюринга задано число в системе счисления с основанием 6. Поставить слева от числа знак # и записать унарное представление этого числа.
- Лента реализована через контейнер list типа данных string. Так же используется структура, которая имеет три поля. Первое поле типа данных string отвечает за новый символ, второе поле типа данных string отвечает за смещение головки, третье поле типа int отвечает за состояние. Программа работает следующим образом, на вход подается строка, затем она проверяется на корректность, если строка введенная строка содержит посторонние символы, предлагается ввести строку снова или завершить программу. Если строка введена правильно, тогда из файла с набором команд происходит заполнение двумерного массива структур, который является таблицей переходов. Затем создаем итератор, который играет роль считывающей головки, устанавливаем его на первый непустой символ и в зависимости от того какой символ, мы делаем переход в новое состояние, меняем символ и сдвигаем итератор. Если итератор указывает на начало или конец списка, добавляем пустой символ. Вывод ленты с указание текущего положения головки происходит следующим образом, в цикле for итератором мы пробегаемся от начала списка и до конца, если итератор совпадает с итератором-головкой мы выводим символ красным цветом, иначе белым.
- Листинг программы
#include<iostream>
#include <iterator>
#include<fstream>
#include<list>
#include<string>
#include<algorithm>
#include <Windows.h>// Обязательное подключение файла
enum ConsoleColor {
Black = 0,
Blue = 1,
Green = 2,
Cyan = 3,
Red = 4,
Magenta = 5,
Brown = 6,
LightGray = 7,
DarkGray = 8,
LightBlue = 9,
LightGreen = 10,
LightCyan = 11,
LightRed = 12,
LightMagenta = 13,
Yellow = 14,
White = 15
};
using namespace std;
typedef struct {
string new_symbol;
string move;
int new_state;
} command;
int main(void) {
setlocale(LC_ALL, "rus");
HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
system("color 00");
//0->0 6->#
//1->1 7->*
//2->2 8->q
//3->3 9->w
//4->4 10->e
//5->5 11->r
//6-># 12->t
//7->* 13->y
//14->z 15->&
fstream fin("input.txt");
list<string> tape;
list<string>::iterator it;
command table[29][16];
bool q0 = false,inp=true;
string words;
cout << "Введите входные данные" << endl;
while (inp) {
cin >> words;
if (words == "/") return 0;
bool correctinput = true;
for (auto item : words) {
if (item == '0' || item == '1' || item == '2' || item == '3' || item == '4' || item == '5');else
...