Хорошие у вас подсказки о сумирование.
for (int i=0; k[i]!='0'; i++) ---> for (int i=0; k[i]!='\0'; i++) -- вот спасибо очень -- а то бы еще долго искал.
У меня еще другой пример уже не к конечным автоматам, а к МП-автоматам с магазинной памяттью. У них должен быть магазин (где нули заставляют стек увеличиватся на 1, а 1--выталкивают некий условный символ Z. D начале есть еще в стеке символ пустого пространства-p.)/ Мне надо следующий код записать с помошью стека.
надо распознавателем проверить строку: {In0n |n=5} + {Im0m |n=4} n--верхний индекс -- я так понимаю мне надо найти такую строку в входных цепях:
1111100000|00001111 или если между двумя подмножествами может быть иная упорядоченость символов то например 1111100000|0001|00001111.
Это я делаю с помошью кода такого как предыдущий а надо с помощью стека. Не подскажите как это делать. Я так понимаю--состояние1--вход 1 (занесение в стек), 2-потом вход 0 выталикание со стека. Потом надо наверное изменить ход работы стека на занесение Z
при встече 0 в {Im0m |n=4}, а потом выталкивание при встрече 1.
Вот код который подходит под ка, а не мп-автомат.
+ |
#include <stdio.h>
#include <iostream>
#include <string.h>
using namespace std;
int state = 0;
void razpoznavat() {
char k[20];
cout << "Vvesti stroku 0 i 1:";
cin >> k;
for (int i = 0; k[i] != '\0'; i++) {
switch (state) {
case 0: {
if (k[i] == '0') {
state = 20;
break;
};
if (k[i] == '1') {
state = 1;
break;
};
break;
}
case 1: {
if (k[i] == '0') {
state = 20;
break;
};
if (k[i] == '1') {
state = 2;
break;
};
break;
}
case 2: {
if (k[i] == '0') {
state = 20;
break;
};
if (k[i] == '1') {
state = 3;
break;
};
break;
}
case 3: {
if (k[i] == '0') {
state = 20;
break;
};
if (k[i] == '1') {
state = 4;
break;
};
break;
}
case 4: {
if (k[i] == '0') {
state = 20;
break;
};
if (k[i] == '1') {
state = 5;
break;
};
break;
case 5:
{
if (k[i] == '0') {
state = 6;
break;
};
if (k[i] == '1') {
state = 20;
break;
};
break;
}
case 6:
{
if (k[i] == '0') {
state = 7;
break;
};
if (k[i] == '1') {
state = 20;
break;
};
break;
}
case 7:
{
if (k[i] == '0') {
state = 8;
break;
};
if (k[i] == '1') {
state = 20;
break;
};
break;
}
case 8:
{
if (k[i] == '0') {
state = 9;
break;
};
if (k[i] == '1') {
state = 20;
break;
};
break;
}
case 9:
{
if (k[i] == '0') {
state = 10;
break;
};
if (k[i] == '1') {
state = 20;
break;
};
break;
}
case 10:
{
if (k[i] == '0') {
state = 11;
break;
};
if (k[i] == '1') {
state = 20;
break;
};
break;
}
case 11:
{
if (k[i] == '0') {
state = 12;
break;
};
if (k[i] == '1') {
state = 20;
break;
};
break;
}
case 12:
{
if (k[i] == '0') {
state = 13;
break;
};
if (k[i] == '1') {
state = 20;
break;
};
break;
}
case 13:
{
if (k[i] == '0') {
state = 14;
break;
};
if (k[i] == '1') {
state = 20;
break;
};
break;
}
case 14:
{
if (k[i] == '0') {
state = 20;
break;
};
if (k[i] == '1') {
state = 15;
break;
};
break;
}
case 15:
{
if (k[i] == '0') {
state = 20;
break;
};
if (k[i] == '1') {
state = 16;
break;
};
break;
}
case 16:
{
if (k[i] == '0') {
state = 20;
break;
};
if (k[i] == '1') {
state = 17;
break;
};
break;
}
case 17:
{
if (k[i] == '0') {
state = 20;
break;
};
if (k[i] == '1') {
state = 18;
break;
};
break;
}
}
}
}
}
int main()
{
razpoznavat()
if (state == 18)
cout << " Pravilnaya cep ";
else
cout << "Nepravilnaya cep";
cout << state;
return 0;
}
|