Текст программы
#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; }
Список используемой Литературы
Трахтенброт Б.А. Алгоритмы и машинное решение задач. - М.: Гостехиздат, 1957
Эббинхауз Г.Д. Машины Тьюринга и рекурсивные функции – М. 1972