Сложение двух десятичных чисел в машине Тьюринга - 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;
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 4.143 из 5
Похожие ответы