Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
документация.docx
Скачиваний:
3
Добавлен:
22.07.2019
Размер:
33.17 Кб
Скачать

Текст программы

#include <conio.h>

#include <iostream.h>

class massiv

{ private:

int *lenta; //лента-массив

int x; //вводимое число

int p; //головка-указатель мт

public:

~massiv(); //деструктор

massiv(int n); //конструктор

void output(); // вывод

void MT(int n); //сама машина Тьюринга

void nechetnii_hod(int pp); //идем вправо нечетный раз. на входе положение головки.

void chetnii_hod(int pp); //идем вправо четный раз

void hod_na_levo(int pp); // идем на лево с единицей

void vozvrachenie(int pp); //возвращаемся назад, чтобы вставить

void preobrazovanie(); //преобразование массива

};

string rus(char s[ ])

// перевод кодировки Windows в Dos

{

string t;

int i=0;

t=s;

while (s[i]!=0)

{

if(s[i]>='А'&& s[i]<='п' ) t[i]-=64;

if(s[i]>='р'&& s[i]<='я' ) t[i]-=16;

if(s[i]=='Ё' )t[i]=240;

if(s[i]=='ё' ) t[i]=241;

i++;

}

return t;

}

void main()

{

int b; //само число

cout <<rus("введите число")<<endl;

cout<<rus("1<x<100")<<endl;

cin>> b;

//проверка ограничения

if( b<1 || b>100)

{cout<<rus("число не удовлетворяет условию 1<x<100")<<endl;

getch();

exit(1);}

massiv a(b); //создание массива

a.MT(b);

a.preobrazovanie();

a.output();

getch();

}

massiv:: massiv(int n)

{ x=n+2;

lenta=new int [x];

lenta[0]=2;

lenta[n+1]=2; // Элемент 2 указывает на начало и конец ленты

for(int i=1; i<=n; i++)

lenta[i]=1;

}

void massiv:: MT(int n)

{ int z=1; //положение головки МТ

while(z<=n)

{ nechetnii_hod(z);

z++;

if(z<=n)

{ chetnii_hod(z);

z++;}

}

}

void massiv:: nechetnii_hod(int pp)

{ p=pp; //головке присваиваем поступившее значение

if(lenta[p]!=0)

{lenta[p]=0; p++;} //обнулили элемент, передвинули p

//проверяем, вдруг элемент оказался конечным

if(lenta[p]!=2) //если элемент не конечный, то

chetnii_hod(p); //вызываем функцию для четного хода

}

void massiv:: chetnii_hod(int pp)

{ p=pp; //головке присваиваем поступившее значение

if (lenta[p]==0)

{ p++; }

else

{ lenta[p]=0; //обнулили элемент

hod_na_levo(p);} // идем на лево с единицей

}

void massiv:: hod_na_levo(int pp)

{ p=pp;

while (lenta[p]!=2 && lenta[p]!=1)

{p--;}

//встетили начало ленты или 1

vozvrachenie(p); //вызываем функцию возвращения

}

void massiv:: vozvrachenie(int pp)

{ p=pp;

p++;

lenta[p]=1;

}

void massiv:: preobrazovanie()

{ i=p-1;

while(lenta[i]!=1 && i>0)

{ lenta[i]=2; i--}

}

void massiv:: output()

{ cout<<rus(“результат работы машины Тьюринга:”)<<endl;

for (int i=0; i<x; i++)

if (lenta[i]!=2 && lenta[i]!=0)

cout<<lenta[i];

}

massiv :: ~massiv()

{ delete[]lenta; }

Список используемой Литературы

  1. Трахтенброт Б.А. Алгоритмы и машинное решение задач. - М.: Гостехиздат, 1957

  2. Эббинхауз Г.Д. Машины Тьюринга и рекурсивные функции – М. 1972

10