Untitled
unknown
c_cpp
2 years ago
4.4 kB
9
Indexable
//ЮФУ, ИКТИБ, МОП ЭВМ
//Программирование и основы теории алгоритмов часть 2
//Домашнее задание №1 - ДКА
//КТбо1-6, Домбрина Алёна Игоревна
//Вариант 1.3
//24.03.24
#include <iostream>
#include <map>
#include <string>
using namespace std;
bool valid_input(string& sequence);
bool recognizer(string sequence);
bool output_of_transitions(string sequence, map<string, map<char, string>>& TransitionTable);
int main()
{
string sequence;
setlocale(LC_ALL, "Russian");
do {
cout << "Введите последовательность: ";
choice:
getline(cin, sequence);
if (sequence == "exit")
{
cout << endl<<"Вы завершили работу! Спасибо за внимание!" << endl;
break;
}
if (sequence == " ")
{
cout <<"Вы ввели пустую последовательность!" << endl;
cout << endl << "Хотите продолжить работу?" << endl << "Если да - введите последовательность заново, если нет - введите exit: ";
goto choice;
}
else if (!valid_input(sequence))
{
cout << "Вы использовали недопустимые символы!"<<endl;
cout <<endl<< "Хотите продолжить работу?" << endl << "Если да - введите последовательность заново, если нет - введите exit: ";
goto choice;
}
else if (sequence.size() < 2)
{
cout << "Вы ввели слишком короткую последовательность!"<<endl;
cout << endl << "Хотите продолжить работу?" << endl << "Если да - введите последовательность заново, если нет - введите exit: ";
goto choice;
}
else
{
if (recognizer(sequence))
{
cout << "Yes" << endl;
cout << "Введена допускающая последовательность!" << endl;
cout << endl << "Хотите продолжить работу?" << endl << "Если да - введите последовательность заново, если нет - введите exit: ";
goto choice;
}
else
{
cout << "No" << endl;
cout << "Введена недопускающая последовательность!" << endl;
cout << endl << "Хотите продолжить работу?" << endl << "Если да - введите последовательность заново, если нет - введите exit: ";
goto choice;
}
}
cout << endl;
} while (true);
return 0;
}
bool valid_input(string& sequence)
{
for (char c : sequence)
{
if (!strchr("ab", c))
{
return false;
}
}
return true;
}
bool recognizer(string sequence)
{
map<string, map<char, string>> TransitionTable =
{
{"q0" , { {'a', "q1" }, {'b', "q10"} } },
{"q1" , { {'a', "q2" }, {'b', "q6"} } },
{"q2" , { {'a', "q2" }, {'b', "q3"} } },
{"q3" , { {'a', "q4" }, {'b', "q3"} } },
{"q4" , { {'a', "q5" }, {'b', "q3"} } },
{"q5" , { {'a', "q5" }, {'b', "q3"} } },
{"q6" , { {'a', "q7" }, {'b', "q8"} } },
{"q7" , { {'a', "q7" }, {'b', "q9"} } },
{"q8" , { {'a', "q7" }, {'b', "q8"} } },
{"q9" , { {'a', "q7" }, {'b', "q8"} } },
{"q10" , { {'a', "q15" }, {'b', "q11"} } },
{"q11" , { {'a', "q12" }, {'b', "q11"} } },
{"q12" , { {'a', "q12" }, {'b', "q13"} } },
{"q13" , { {'a', "q12" }, {'b', "q14"} } },
{"q14" , { {'a', "q12" }, {'b', "q14"} } },
{"q15" , { {'a', "q17" }, {'b', "q16"} } },
{"q16" , { {'a', "q18" }, {'b', "q16"} } },
{"q17" , { {'a', "q17" }, {'b', "q16"} } },
{"q18" , { {'a', "q17" }, {'b', "q16"} } }
};
return output_of_transitions(sequence, TransitionTable);
}
bool output_of_transitions(string sequence, map<string, map<char, string>>& TransitionTable)
{
string q_cur = "q0";
string q_follow;
for (auto it = sequence.begin(); it != sequence.end(); it++)
{
q_follow = TransitionTable[q_cur][*it];
cout << *it << ": " << q_cur << " -> " << q_follow << endl;
q_cur = q_follow;
}
if (q_follow == "q2" || q_follow == "q5" || q_follow == "q6" || q_follow == "q9" || q_follow == "q11" || q_follow == "q14" || q_follow == "q15" || q_follow == "q18")
{
return true;
}
else
{
return false;
}
}
Editor is loading...
Leave a Comment