Сложение двух десятичных чисел в машине Тьюринга - 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; }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д