Сложение двух десятичных чисел в машине Тьюринга - C (СИ)
Формулировка задачи:
Доброе время суток!
сразу дико извеняюсь что влез не в свою ветку (ибо ситуация становится крайне напряженной) но все же...
Есть прогамма на писанная на Си. суть ее в том чтобы производить вычитание двух десятичных чисел в машине тьюринга, а мне нужно сделать сложение 2-х десятичных чисел.
#include <stdio.h>
#include <string.h>
int i;
int q=1; /*текущее состояние УУ*/
int pos; /*позиция текущего символа ленты*/
char a; /*текущий символ ленты*/
char lenta[200]="#"; /*лента*/
char s1[80];
char s2[80];
void main(void){
l1:
printf("vvedite 1 chislo:");
gets(s1); /*ввод 1 числа*/
if (strlen(s1)<1) goto l1; /*проверка ввода*/
for(i=0;i<strlen(s1);i++) if ((s1[i]<'0')||(s1[i]>'9')) goto l1;
l2:
printf("vvedite 2 chislo:");
gets(s2); /*ввод 2 числа*/
if (strlen(s2)<1) goto l2; /*проверка ввода*/
for(i=0;i<strlen(s2);i++) if ((s2[i]<'0')||(s2[i]>'9')) goto l2;
if (strlen(s1)<strlen(s2)){printf("1 chislo < 2. Vvedite zanovo.\n");goto l1;}
if (strlen(s1)==strlen(s2)){
for (i=0;i<strlen(s1);i++){
if (s1[i]<s2[i]){printf("1 chislo < 2. Vvedite zanovo.\n");goto l1;}
if (s1[i]>s2[i]) break;}}
strcat(lenta,s1);
pos=strlen(s1)+1;
lenta[pos]='-';
lenta[pos+1]='\0';
strcat(lenta,s2);
pos=pos+strlen(s2)+1;
lenta[pos]='=';
lenta[pos+1]='#';
lenta[pos+2]='\0';
pos=1;
puts(lenta); /*вывод ленты на экран*/
for (i=0;i<pos;i++) putchar(' ');
putchar('^');
printf("\t\tcoctoyanie Q%d\n",q);
getch();
do{
a=lenta[pos]; /*выделяем клетку ленты*/
switch(q) /*анализируем состояние УУ*/
{case 1:switch(a) /*помечаем цифру 1 числа для переноса*/
{case('0'):q=2;
lenta[pos]='a';
pos++;
break;
case('1'):q=3;
lenta[pos]='b';
pos++;
break;
case('2'):q=4;
lenta[pos]='c';
pos++;
break;
case('3'):q=5;
lenta[pos]='d';
pos++;
break;
case('4'):q=6;
lenta[pos]='e';
pos++;
break;
case('5'):q=7;
lenta[pos]='f';
pos++;
break;
case('6'):q=8;
lenta[pos]='g';
pos++;
break;
case('7'):q=9;
lenta[pos]='h';
pos++;
break;
case('8'):q=10;
lenta[pos]='i';
pos++;
break;
case('9'):q=11;
lenta[pos]='j';
pos++;
break;
case('-'):q=13;pos++;break;}
break;
case 2:switch(a) /*сдвигаемся в конец ленты и записываем 0*/
{case('#'):
q=12;
lenta[pos]='0';
lenta[pos+1]='#';
lenta[pos+2]='\0';
pos--;
break;
default:pos++;break;}
break;
case 3:switch(a) /*сдвигаемся в конец ленты и записываем 1*/
{case('#'):
q=12;
lenta[pos]='1';
lenta[pos+1]='#';
lenta[pos+2]='\0';
pos--;
break;
default:pos++;break;}
break;
case 4:switch(a) /*сдвигаемся в конец ленты и записываем 2*/
{case('#'):
q=12;
lenta[pos]='2';
lenta[pos+1]='#';
lenta[pos+2]='\0';
pos--;
break;
default:pos++;break;}
break;
case 5:switch(a) /*сдвигаемся в конец ленты и записываем 3*/
{case('#'):
q=12;
lenta[pos]='3';
lenta[pos+1]='#';
lenta[pos+2]='\0';
pos--;
break;
default:pos++;break;}
break;
case 6:switch(a) /*сдвигаемся в конец ленты и записываем 4*/
{case('#'):
q=12;
lenta[pos]='4';
lenta[pos+1]='#';
lenta[pos+2]='\0';
pos--;
break;
default:pos++;break;}
break;
case 7:switch(a) /*сдвигаемся в конец ленты и записываем 5*/
{case('#'):
q=12;
lenta[pos]='5';
lenta[pos+1]='#';
lenta[pos+2]='\0';
pos--;
break;
default:pos++;break;}
break;
case 8:switch(a) /*сдвигаемся в конец ленты и записываем 6*/
{case('#'):
q=12;
lenta[pos]='6';
lenta[pos+1]='#';
lenta[pos+2]='\0';
pos--;
break;
default:pos++;break;}
break;
case 9:switch(a) /*сдвигаемся в конец ленты и записываем 7*/
{case('#'):
q=12;
lenta[pos]='7';
lenta[pos+1]='#';
lenta[pos+2]='\0';
pos--;
break;
default:pos++;break;}
break;
case 10:switch(a) /*сдвигаемся в конец ленты и записываем 8*/
{case('#'):
q=12;
lenta[pos]='8';
lenta[pos+1]='#';
lenta[pos+2]='\0';
pos--;
break;
default:pos++;break;}
break;
case 11:switch(a) /*сдвигаемся в конец ленты и записываем 9*/
{case('#'):
q=12;
lenta[pos]='9';
lenta[pos+1]='#';
lenta[pos+2]='\0';
pos--;
break;
default:pos++;break;}
break;
case 12:switch(a) /*смещаемся на 1 непомеченую цифру 1 числа*/
{case('a'):q=1;pos++;break;
case('b'):q=1;pos++;break;
case('c'):q=1;pos++;break;
case('d'):q=1;pos++;break;
case('e'):q=1;pos++;break;
case('f'):q=1;pos++;break;
case('g'):q=1;pos++;break;
case('h'):q=1;pos++;break;
case('i'):q=1;pos++;break;
case('j'):q=1;pos++;break;
default:pos--;break;}
break;
case 13:switch(a) /*смещаемся в конец 2 слова*/
{case('='):q=14;pos--;break;
default:pos++;break;}
break;
case 14:switch(a) /*выбираем правый непомеченый символ 2 слова и метим*/
{case('0'):q=15;
lenta[pos]='a';
pos++;
break;
case('1'):q=16;
lenta[pos]='b';
pos++;
break;
case('2'):q=17;
lenta[pos]='c';
pos++;
break;
case('3'):q=18;
lenta[pos]='d';
pos++;
break;
case('4'):q=19;
lenta[pos]='e';
pos++;
break;
case('5'):q=20;
lenta[pos]='f';
pos++;
break;
case('6'):q=21;
lenta[pos]='g';
pos++;
break;
case('7'):q=22;
lenta[pos]='h';
pos++;
break;
case('8'):q=23;
lenta[pos]='i';
pos++;
break;
case('9'):q=24;
lenta[pos]='j';
pos++;
break;
case('-'):q=13;pos++;break;}
break;
case 15:switch(a) /*смещаемся к концу 2 числа*/
{case('='):q=25;pos++;break;
default:pos++;break;}
break;
case 16:switch(a) /*смещаемся к концу 2 числа*/
{case('='):q=26;pos++;break;
default:pos++;break;}
break;
case 17:switch(a) /*смещаемся к концу 2 числа*/
{case('='):q=27;pos++;break;
default:pos++;break;}
break;
case 18:switch(a) /*смещаемся к концу 2 числа*/
{case('='):q=28;pos++;break;
default:pos++;break;}
break;
case 19:switch(a) /*смещаемся к концу 2 числа*/
{case('='):q=29;pos++;break;
default:pos++;break;}
break;
case 20:switch(a) /*смещаемся к концу 2 числа*/
{case('='):q=30;pos++;break;
default:pos++;break;}
break;
case 21:switch(a) /*смещаемся к концу 2 числа*/
{case('='):q=31;pos++;break;
default:pos++;break;}
break;
case 22:switch(a) /*смещаемся к концу 2 числа*/
{case('='):q=32;pos++;break;
default:pos++;break;}
break;
case 23:switch(a) /*смещаемся к концу 2 числа*/
{case('='):q=33;pos++;break;
default:pos++;break;}
break;
case 24:switch(a) /*смещаемся к концу 2 числа*/
{case('='):q=34;pos++;break;
default:pos++;break;}
break;
case 25:switch(a) /*смещаемся на 1 непомеченую клетку результата*/
{case('a'):q=35;pos--;break;
case('b'):q=35;pos--;break;
case('c'):q=35;pos--;break;
case('d'):q=35;pos--;break;
case('e'):q=35;pos--;break;
case('f'):q=35;pos--;break;
case('g'):q=35;pos--;break;
case('h'):q=35;pos--;break;
case('i'):q=35;pos--;break;
case('j'):q=35;pos--;break;
case('#'):q=35;pos--;break;
default:pos++;break;}
break;
case 26:switch(a) /*смещаемся на 1 непомеченую клетку результата*/
{case('a'):q=36;pos--;break;
case('b'):q=36;pos--;break;
case('c'):q=36;pos--;break;
case('d'):q=36;pos--;break;
case('e'):q=36;pos--;break;
case('f'):q=36;pos--;break;
case('g'):q=36;pos--;break;
case('h'):q=36;pos--;break;
case('i'):q=36;pos--;break;
case('j'):q=36;pos--;break;
case('#'):q=36;pos--;break;
default:pos++;break;}
break;
case 27:switch(a) /*смещаемся на 1 непомеченую клетку результата*/
{case('a'):q=37;pos--;break;
case('b'):q=37;pos--;break;
case('c'):q=37;pos--;break;
case('d'):q=37;pos--;break;
case('e'):q=37;pos--;break;
case('f'):q=37;pos--;break;
case('g'):q=37;pos--;break;
case('h'):q=37;pos--;break;
case('i'):q=37;pos--;break;
case('j'):q=37;pos--;break;
case('#'):q=37;pos--;break;
default:pos++;break;}
break;
case 28:switch(a) /*смещаемся на 1 непомеченую клетку результата*/
{case('a'):q=38;pos--;break;
case('b'):q=38;pos--;break;
case('c'):q=38;pos--;break;
case('d'):q=38;pos--;break;
case('e'):q=38;pos--;break;
case('f'):q=38;pos--;break;
case('g'):q=38;pos--;break;
case('h'):q=38;pos--;break;
case('i'):q=38;pos--;break;
case('j'):q=38;pos--;break;
case('#'):q=38;pos--;break;
default:pos++;break;}
break;
case 29:switch(a) /*смещаемся на 1 непомеченую клетку результата*/
{case('a'):q=39;pos--;break;
case('b'):q=39;pos--;break;
case('c'):q=39;pos--;break;
case('d'):q=39;pos--;break;
case('e'):q=39;pos--;break;
case('f'):q=39;pos--;break;
case('g'):q=39;pos--;break;
case('h'):q=39;pos--;break;
case('i'):q=39;pos--;break;
case('j'):q=39;pos--;break;
case('#'):q=39;pos--;break;
default:pos++;break;}
break;
case 30:switch(a) /*смещаемся на 1 непомеченую клетку результата*/
{case('a'):q=40;pos--;break;
case('b'):q=40;pos--;break;
case('c'):q=40;pos--;break;
case('d'):q=40;pos--;break;
case('e'):q=40;pos--;break;
case('f'):q=40;pos--;break;
case('g'):q=40;pos--;break;
case('h'):q=40;pos--;break;
case('i'):q=40;pos--;break;
case('j'):q=40;pos--;break;
case('#'):q=40;pos--;break;
default:pos++;break;}
break;
case 31:switch(a) /*смещаемся на 1 непомеченую клетку результата*/
{case('a'):q=41;pos--;break;
case('b'):q=41;pos--;break;
case('c'):q=41;pos--;break;
case('d'):q=41;pos--;break;
case('e'):q=41;pos--;break;
case('f'):q=41;pos--;break;
case('g'):q=41;pos--;break;
case('h'):q=41;pos--;break;
case('i'):q=41;pos--;break;
case('j'):q=41;pos--;break;
case('#'):q=41;pos--;break;
default:pos++;break;}
break;
case 32:switch(a) /*смещаемся на 1 непомеченую клетку результата*/
{case('a'):q=42;pos--;break;
case('b'):q=42;pos--;break;
case('c'):q=42;pos--;break;
case('d'):q=42;pos--;break;
case('e'):q=42;pos--;break;
case('f'):q=42;pos--;break;
case('g'):q=42;pos--;break;
case('h'):q=42;pos--;break;
case('i'):q=42;pos--;break;
case('j'):q=42;pos--;break;
case('#'):q=42;pos--;break;
default:pos++;break;}
break;
case 33:switch(a) /*смещаемся на 1 непомеченую клетку результата*/
{case('a'):q=43;pos--;break;
case('b'):q=43;pos--;break;
case('c'):q=43;pos--;break;
case('d'):q=43;pos--;break;
case('e'):q=43;pos--;break;
case('f'):q=43;pos--;break;
case('g'):q=43;pos--;break;
case('h'):q=43;pos--;break;
case('i'):q=43;pos--;break;
case('j'):q=43;pos--;break;
case('#'):q=43;pos--;break;
default:pos++;break;}
break;
case 34:switch(a) /*смещаемся на 1 непомеченую клетку результата*/
{case('a'):q=44;pos--;break;
case('b'):q=44;pos--;break;
case('c'):q=44;pos--;break;
case('d'):q=44;pos--;break;
case('e'):q=44;pos--;break;
case('f'):q=44;pos--;break;
case('g'):q=44;pos--;break;
case('h'):q=44;pos--;break;
case('i'):q=44;pos--;break;
case('j'):q=44;pos--;break;
case('#'):q=44;pos--;break;
default:pos++;break;}
break;
case 35:switch(a) /*записываем результат разности данного разряда*/
{case('0'):q=45;
lenta[pos]='a';
pos--;
break;
case('1'):q=45;
lenta[pos]='b';
pos--;
break;
case('2'):q=45;
lenta[pos]='c';
pos--;
break;
case('3'):q=45;
lenta[pos]='d';
pos--;
break;
case('4'):q=45;
lenta[pos]='e';
pos--;
break;
case('5'):q=45;
lenta[pos]='f';
pos--;
break;
case('6'):q=45;
lenta[pos]='g';
pos--;
break;
case('7'):q=45;
lenta[pos]='h';
pos--;
break;
case('8'):q=45;
lenta[pos]='i';
pos--;
break;
case('9'):q=45;
lenta[pos]='j';
pos--;
break;}
break;
case 36:switch(a) /*записываем результат разности данного разряда*/
{case('0'):q=46;
lenta[pos]='j';
pos--;
break;
case('1'):q=45;
lenta[pos]='a';
pos--;
break;
case('2'):q=45;
lenta[pos]='b';
pos--;
break;
case('3'):q=45;
lenta[pos]='c';
pos--;
break;
case('4'):q=45;
lenta[pos]='d';
pos--;
break;
case('5'):q=45;
lenta[pos]='e';
pos--;
break;
case('6'):q=45;
lenta[pos]='f';
pos--;
break;
case('7'):q=45;
lenta[pos]='g';
pos--;
break;
case('8'):q=45;
lenta[pos]='h';
pos--;
break;
case('9'):q=45;
lenta[pos]='i';
pos--;
break;}
break;
case 37:switch(a) /*записываем результат разности данного разряда*/
{case('0'):q=46;
lenta[pos]='i';
pos--;
break;
case('1'):q=46;
lenta[pos]='j';
pos--;
break;
case('2'):q=45;
lenta[pos]='a';
pos--;
break;
case('3'):q=45;
lenta[pos]='b';
pos--;
break;
case('4'):q=45;
lenta[pos]='c';
pos--;
break;
case('5'):q=45;
lenta[pos]='d';
pos--;
break;
case('6'):q=45;
lenta[pos]='e';
pos--;
break;
case('7'):q=45;
lenta[pos]='f';
pos--;
break;
case('8'):q=45;
lenta[pos]='g';
pos--;
break;
case('9'):q=45;
lenta[pos]='h';
pos--;
break;}
break;
case 38:switch(a) /*записываем результат разности данного разряда*/
{case('0'):q=46;
lenta[pos]='h';
pos--;
break;
case('1'):q=46;
lenta[pos]='i';
pos--;
break;
case('2'):q=46;
lenta[pos]='j';
pos--;
break;
case('3'):q=45;
lenta[pos]='a';
pos--;
break;
case('4'):q=45;
lenta[pos]='b';
pos--;
break;
case('5'):q=45;
lenta[pos]='c';
pos--;
break;
case('6'):q=45;
lenta[pos]='d';
pos--;
break;
case('7'):q=45;
lenta[pos]='e';
pos--;
break;
case('8'):q=45;
lenta[pos]='f';
pos--;
break;
case('9'):q=45;
lenta[pos]='g';
pos--;
break;}
break;
case 39:switch(a) /*записываем результат разности данного разряда*/
{case('0'):q=46;
lenta[pos]='g';
pos--;
break;
case('1'):q=46;
lenta[pos]='h';
pos--;
break;
case('2'):q=46;
lenta[pos]='i';
pos--;
break;
case('3'):q=46;
lenta[pos]='j';
pos--;
break;
case('4'):q=45;
lenta[pos]='a';
pos--;
break;
case('5'):q=45;
lenta[pos]='b';
pos--;
break;
case('6'):q=45;
lenta[pos]='c';
pos--;
break;
case('7'):q=45;
lenta[pos]='d';
pos--;
break;
case('8'):q=45;
lenta[pos]='e';
pos--;
break;
case('9'):q=45;
lenta[pos]='f';
pos--;
break;}
break;
case 40:switch(a) /*записываем результат разности данного разряда*/
{case('0'):q=46;
lenta[pos]='f';
pos--;
break;
case('1'):q=46;
lenta[pos]='g';
pos--;
break;
case('2'):q=46;
lenta[pos]='h';
pos--;
break;
case('3'):q=46;
lenta[pos]='i';
pos--;
break;
case('4'):q=46;
lenta[pos]='j';
pos--;
break;
case('5'):q=45;
lenta[pos]='a';
pos--;
break;
case('6'):q=45;
lenta[pos]='b';
pos--;
break;
case('7'):q=45;
lenta[pos]='c';
pos--;
break;
case('8'):q=45;
lenta[pos]='d';
pos--;
break;
case('9'):q=45;
lenta[pos]='e';
pos--;
break;}
break;
case 41:switch(a) /*записываем результат разности данного разряда*/
{case('0'):q=46;
lenta[pos]='e';
pos--;
break;
case('1'):q=46;
lenta[pos]='f';
pos--;
break;
case('2'):q=46;
lenta[pos]='g';
pos--;
break;
case('3'):q=46;
lenta[pos]='h';
pos--;
break;
case('4'):q=46;
lenta[pos]='i';
pos--;
break;
case('5'):q=46;
lenta[pos]='j';
pos--;
break;
case('6'):q=45;
lenta[pos]='a';
pos--;
break;
case('7'):q=45;
lenta[pos]='b';
pos--;
break;
case('8'):q=45;
lenta[pos]='c';
pos--;
break;
case('9'):q=45;
lenta[pos]='d';
pos--;
break;}
break;
case 42:switch(a) /*записываем результат разности данного разряда*/
{case('0'):q=46;
lenta[pos]='d';
pos--;
break;
case('1'):q=46;
lenta[pos]='e';
pos--;
break;
case('2'):q=46;
lenta[pos]='f';
pos--;
break;
case('3'):q=46;
lenta[pos]='g';
pos--;
break;
case('4'):q=46;
lenta[pos]='h';
pos--;
break;
case('5'):q=46;
lenta[pos]='i';
pos--;
break;
case('6'):q=46;
lenta[pos]='j';
pos--;
break;
case('7'):q=45;
lenta[pos]='a';
pos--;
break;
case('8'):q=45;
lenta[pos]='b';
pos--;
break;
case('9'):q=45;
lenta[pos]='c';
pos--;
break;}
break;
case 43:switch(a) /*записываем результат разности данного разряда*/
{case('0'):q=46;
lenta[pos]='c';
pos--;
break;
case('1'):q=46;
lenta[pos]='d';
pos--;
break;
case('2'):q=46;
lenta[pos]='e';
pos--;
break;
case('3'):q=46;
lenta[pos]='f';
pos--;
break;
case('4'):q=46;
lenta[pos]='g';
pos--;
break;
case('5'):q=46;
lenta[pos]='h';
pos--;
break;
case('6'):q=46;
lenta[pos]='i';
pos--;
break;
case('7'):q=46;
lenta[pos]='j';
pos--;
break;
case('8'):q=45;
lenta[pos]='a';
pos--;
break;
case('9'):q=45;
lenta[pos]='b';
pos--;
break;}
break;
case 44:switch(a) /*записываем результат разности данного разряда*/
{case('0'):q=46;
lenta[pos]='b';
pos--;
break;
case('1'):q=46;
lenta[pos]='c';
pos--;
break;
case('2'):q=46;
lenta[pos]='d';
pos--;
break;
case('3'):q=46;
lenta[pos]='e';
pos--;
break;
case('4'):q=46;
lenta[pos]='f';
pos--;
break;
case('5'):q=46;
lenta[pos]='g';
pos--;
break;
case('6'):q=46;
lenta[pos]='h';
pos--;
break;
case('7'):q=46;
lenta[pos]='i';
pos--;
break;
case('8'):q=46;
lenta[pos]='j';
pos--;
break;
case('9'):q=45;
lenta[pos]='a';
pos--;
break;}
break;
case 45:switch(a) /*смещаемся ко 2 числу*/
{case('='):q=47;pos--;break;
default:pos--;break;}
break;
case 46:switch(a) /*переносим 1 из старшего разряда*/
{case('0'):
lenta[pos]='9';
pos--;
break;
case('1'):q=45;
lenta[pos]='0';
pos--;
break;
case('2'):q=45;
lenta[pos]='1';
pos--;
break;
case('3'):q=45;
lenta[pos]='2';
pos--;
break;
case('4'):q=45;
lenta[pos]='3';
pos--;
break;
case('5'):q=45;
lenta[pos]='4';
pos--;
break;
case('6'):q=45;
lenta[pos]='5';
pos--;
break;
case('7'):q=45;
lenta[pos]='6';
pos--;
break;
case('8'):q=45;
lenta[pos]='7';
pos--;
break;
case('9'):q=45;
lenta[pos]='8';
pos--;
break;}
break;
case 47:switch(a) /*ищем непомеченый разряд 2 числа и помечаем его, если его нет, то операция разности завершена*/
{case('0'):q=14;break;
case('1'):q=14;break;
case('2'):q=14;break;
case('3'):q=14;break;
case('4'):q=14;break;
case('5'):q=14;break;
case('6'):q=14;break;
case('7'):q=14;break;
case('8'):q=14;break;
case('9'):q=14;break;
case('-'):q=48;pos++;break;
default:pos--;break;}
break;
case 48:switch(a) /*перемещаемся в конец ленты*/
{case('#'):q=49;pos--;break;
default:pos++;break;}
break;
case 49:switch(a) /*восстанавливаем все помеченные символы*/
{case('a'):
lenta[pos]='0';
pos--;
break;
case('b'):
lenta[pos]='1';
pos--;
break;
case('c'):
lenta[pos]='2';
pos--;
break;
case('d'):
lenta[pos]='3';
pos--;
break;
case('e'):
lenta[pos]='4';
pos--;
break;
case('f'):
lenta[pos]='5';
pos--;
break;
case('g'):
lenta[pos]='6';
pos--;
break;
case('h'):
lenta[pos]='7';
pos--;
break;
case('i'):
lenta[pos]='8';
pos--;
break;
case('j'):
lenta[pos]='9';
pos--;
break;
case('#'):q=0;pos++;break;
default:pos--;break;}
break;
}
puts(lenta); /*вывод ленты на экран*/
for (i=0;i<pos;i++) putchar(' ');
putchar('^');
printf("\t\tcoctoyanie Q%d\n",q);
getch();
} while(q!=0); /*q0-заключительное состояние*/
printf("\nkonec raboty");
getch();
}Решение задачи: «Сложение двух десятичных чисел в машине Тьюринга»
textual
Листинг программы
#include <iostream>
#include <windows.h>
#include <clocale>
#include <conio.h>
using namespace std;
//Выводим на печать
void print(char *str, int pos, int q){
cout<<"\nq="; cout<<q;
cout <<"\n@";
for (int i=1; str[i]!='@' ;i++)
cout <<str[i];
cout<<"@\n";
for (int i=0;i<pos;i++)
cout <<" ";
cout <<"^";
}
int q3_g12 (char *str, int &pos, int &q, char chch)
{
char ch = str[pos];
switch(ch)
{
case ('0'):
case ('1'):
case ('2'):
case ('3'):
case ('4'):
case ('5'):
case ('6'):
case ('7'):
case ('8'):
case ('9'):
case ('-'):
case ('='): pos++; break;
case ('@')://Обработка символа @
str[pos] = chch;
pos--;//Движение головки влево
q=13;//Новое состояние q13
break;
default: return q;
}
return 99;
} 
int razn (char* str)
{
int pos=1;
char ch=str[pos];//Текущий символ
int q=0;
do
{
print(str, pos, q); Sleep(200);//_getch();
switch (q)
{
case 0://Обрабатываем состояние q0
switch(ch)
{
case ('0'):
case ('1'):
case ('2'):
case ('3'):
case ('4'):
case ('5'):
case ('6'):
case ('7'):
case ('8'):
case ('9'):
case ('-'): pos++; break;
case ('@')://Обработка символа @
q=1;//Новое состояние q1
str[pos] = '=';//Новый символ =
print(str, pos, q); Sleep(200); pos--;//Движение головки влево
break;
default: return q;
}break;
case 1:
switch(ch)
{
case ('0'):
case ('1'):
case ('2'):
case ('3'):
case ('4'):
case ('5'):
case ('6'):
case ('7'):
case ('8'):
case ('9'):
case ('-'): pos--; break;
case ('@'): pos++; q=2; break;
default: return q;
}break;
case 2:
switch(ch)
{
case ('0'): str[pos] = 'A'; pos++; q=3; break;
case ('1'): str[pos] = 'B'; pos++; q=4; break;
case ('2'): str[pos] = 'C'; pos++; q=5; break;
case ('3'): str[pos] = 'D'; pos++; q=6; break;
case ('4'): str[pos] = 'E'; pos++; q=7; break;
case ('5'): str[pos] = 'F'; pos++; q=8; break;
case ('6'): str[pos] = 'G'; pos++; q=9; break;
case ('7'): str[pos] = 'H'; pos++; q=10; break;
case ('8'): str[pos] = 'I'; pos++; q=11; break;
case ('9'): str[pos] = 'J'; pos++; q=12; break;
case ('-'): pos++; q=14; break;
case ('='): pos++; q=16; break;
default: return q;
}break;
case 3:
q3_g12(str, pos, q, '0');
break;
case 4:
q3_g12(str, pos, q, '1');
break;
case 5:
q3_g12(str, pos, q, '2');
break;
case 6:
q3_g12(str, pos, q, '3');
break;
case 7:
q3_g12(str, pos, q, '4');
break;
case 8:
q3_g12(str, pos, q, '5');
break;
case 9:
q3_g12(str, pos, q, '6');
break;
case 10:
q3_g12(str, pos, q, '7');
break;
case 11:
q3_g12(str, pos, q, '8');
break;
case 12:
q3_g12(str, pos, q, '9');
break;
case 13:
switch(ch)
{
case ('0'):
case ('1'):
case ('2'):
case ('3'):
case ('4'):
case ('5'):
case ('6'):
case ('7'):
case ('8'):
case ('9'):
case ('-'):
case ('='): pos--; break;
case ('A'):
case ('B'):
case ('C'):
case ('D'):
case ('E'):
case ('F'):
case ('G'):
case ('H'):
case ('I'):
case ('J'): pos++; q=2; break;
default: return q;
}break;
case 14:
switch(ch)
{
case ('0'):
case ('1'):
case ('2'):
case ('3'):
case ('4'):
case ('5'):
case ('6'):
case ('7'):
case ('8'):
case ('9'):
case ('='): pos++; break;
case ('@'):
str[pos] = '-';
pos--; q=15; break;
default: return q;
}break;
case 15:
switch(ch)
{
case ('0'):
case ('1'):
case ('2'):
case ('3'):
case ('4'):
case ('5'):
case ('6'):
case ('7'):
case ('8'):
case ('9'):
case ('='): pos--; break;
case ('-'): pos++; q=2; break;
default: return q;
}break;
case 16:
switch(ch)
{
case ('0'):
case ('1'):
case ('2'):
case ('3'):
case ('4'):
case ('5'):
case ('6'):
case ('7'):
case ('8'):
case ('9'):
case ('-'): pos++; break;
case ('@'): pos--; q=17; break;
default: return q;
}break;
case 17:
switch(ch)
{
case ('9'): str[pos] = '8'; q=20; break;
case ('8'): str[pos] = '7'; q=20; break;
case ('7'): str[pos] = '6'; q=20; break;
case ('6'): str[pos] = '5'; q=20; break;
case ('5'): str[pos] = '4'; q=20; break;
case ('4'): str[pos] = '3'; q=20; break;
case ('3'): str[pos] = '2'; q=20; break;
case ('2'): str[pos] = '1'; q=20; break;
case ('1'): str[pos] = '0'; q=20; break;
case ('0'): pos--; q=18; break;
default: return q;
}break;
case 18:
switch(ch)
{
case ('9'): str[pos] = '8'; pos++; q=19; break;
case ('8'): str[pos] = '7'; pos++; q=19; break;
case ('7'): str[pos] = '6'; pos++; q=19; break;
case ('6'): str[pos] = '5'; pos++; q=19; break;
case ('5'): str[pos] = '4'; pos++; q=19; break;
case ('4'): str[pos] = '3'; pos++; q=19; break;
case ('3'): str[pos] = '2'; pos++; q=19; break;
case ('2'): str[pos] = '1'; pos++; q=19; break;
case ('1'): str[pos] = '0'; pos++; q=19; break;
case ('0'): pos--; break;
case ('-'): str[pos] = '@'; pos++; q=22; break;
default: return q;
}break;
case 19:
switch(ch)
{
case ('0'): str[pos] = '9'; pos++; break;
case ('-'):
case ('@'): pos--; q=20; break;
default: return q;
}break;
case 20:
switch(ch)
{
case ('0'):
case ('1'):
case ('2'):
case ('3'):
case ('4'):
case ('5'):
case ('6'):
case ('7'):
case ('8'):
case ('9'): pos--; break;
case ('-'): pos--; q=17; break;
case ('='): pos++; q=21; break;
default: return q;
}break;
case 21:
switch(ch)
{
case ('0'):
case ('1'):
case ('2'):
case ('3'):
case ('4'):
case ('5'):
case ('6'):
case ('7'):
case ('8'):
case ('9'):
case ('-'): pos++; break;
case ('@'): pos--; q=17; break;
default: return q;
}break;
case 22:
switch(ch)
{
case ('0'):
case ('1'):
case ('2'):
case ('3'):
case ('4'):
case ('5'):
case ('6'):
case ('7'):
case ('8'):
case ('9'): str[pos] = '@'; pos++; break;
case ('@'): pos--; q=23; break;
default: return q;
}break;
case 23:
switch(ch)
{
case ('0'):
case ('1'):
case ('2'):
case ('3'):
case ('4'):
case ('5'):
case ('6'):
case ('7'):
case ('8'):
case ('9'):
case ('@'): pos--; break;
case ('='): pos--; q=24; break;
default: return q;
}break;
case 24:
switch(ch)
{
case ('A'): str[pos] = '0'; pos--; break;
case ('B'): str[pos] = '1'; pos--; break;
case ('C'): str[pos] = '2'; pos--; break;
case ('D'): str[pos] = '3'; pos--; break;
case ('E'): str[pos] = '4'; pos--; break;
case ('F'): str[pos] = '5'; pos--; break;
case ('G'): str[pos] = '6'; pos--; break;
case ('H'): str[pos] = '7'; pos--; break;
case ('I'): str[pos] = '8'; pos--; break;
case ('J'): str[pos] = '9'; pos--; break;
case ('-'): pos--; break;
case ('@'): pos++; q=99; break;
default: return q;
}break;
}
ch=str[pos];
}while (q!=99);
return q;
}
int main ()
{
setlocale(LC_CTYPE,"Russian");//установка русской кодировки в консоле
char lenta[255];//входная строка
lenta[0] = '@';
cout<<"Эмуляция работы машины Тьюринга"<<endl;
cout<<"Введите два 10-х числа, между ними поставьте знак минуса (например 123-23):"<<endl;
cin>>&lenta[1];
for (size_t i=strlen(lenta) ;i<255;i++) lenta[i]='@';//Заполняем ленту служебными симполами
int q;
if ((q=razn(lenta))!=99)
{
cout <<"\nОшибка на состоянии " <<q;
_getch();
return 1;
}
cout <<"\nРезультат равен:";
print (lenta, 0, 99);
_getch();
return 0;
}