Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- #include<fstream>
- #include<cmath>
- #include<iomanip>
- using namespace std;
- int main()
- {
- const int n = 100, kol_sost = 10;
- const int number_comand = 18;
- char a[n];
- struct zap
- {
- char sym;
- int sost;
- char move;// R-right L-left H-halt
- };
- zap tabl[kol_sost][100];
- int i, p;
- int sost = 1;
- for (i = 0; i < n; i++)
- a[i] = '_';
- ifstream in("turing.txt");
- ofstream out("out.txt");
- char sym_in, sym_out;
- int sost_in, sost_out;
- char mv;
- if (!in)
- {
- cout << "Can't open file " << endl;
- system("pause");
- exit(-1);
- }
- for (i = 0; i < number_comand; i++)
- {
- in >> sym_in >> sym_out >> mv >> sost_in >> sost_out;
- tabl[sost_in][sym_in].sost = sost_out;
- tabl[sost_in][sym_in].sym = sym_out;
- tabl[sost_in][sym_in].move = mv;
- }
- in.close();
- out << " TURING MACHINES (ALAN TURING 1937) " << endl;
- out << setw(7);
- for (int i = 1; i < kol_sost; i++) {
- out << setw(6) << i;
- }
- out << endl;
- out << '_';
- tabl[8]['_'].move = 'H';
- tabl[8]['_'].sost = 0;
- tabl[8]['_'].sym = '1';
- for (sost_in = 1; sost_in < kol_sost; sost_in++)
- out << setw(4) << tabl[sost_in]['_'].sym << tabl[sost_in]['_'].sost<< tabl[sost_in]['_'].move;
- out << endl;
- out << '1';
- tabl[5]['1'].move = 'H';
- tabl[5]['1'].sost = 0;
- tabl[5]['1'].sym = '1';
- for (sost_in = 1; sost_in < kol_sost; sost_in++)
- out << setw(4) << tabl[sost_in][sym_in].sym
- << tabl[sost_in][sym_in].sost << tabl[sost_in][sym_in].move;
- out << endl;
- in.close();
- cout << endl << "enter input word; number of symbols <=20; symbol '_' is a last symbol " << endl;
- cout << "alfabet ['_','0'] " << endl;
- cout << endl << "input word " << endl;
- for (i = 50; i < n; i++)
- {
- cin >> a[i];
- if (a[i] == '_') break;
- }
- out << "input word" << endl;
- for (i = 0; i < n; i++) out << a[i];
- out << endl;
- i = 50; int t = 0;
- while (sost && (t < 1000))
- {
- char r = tabl[sost][a[i]].sym;
- int s = tabl[sost][a[i]].sost;
- mv = tabl[sost][a[i]].move;
- sost = s;
- a[i] = r;
- if (mv == 'R') i++; else
- if (mv == 'L') i--;
- t++;
- }
- out << endl << "output word" << endl;
- for (i = 0; i < n; i++) out << a[i];
- out.close();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement