ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 09.06.2019
Просмотров: 172
Скачиваний: 2
Лабораторная работа № 3
(№ 9 по списку и инд. вариант t= 9 )
Студента группы ИТ 14-1
Красовский Абхай Владленович
Построение автоматов с магазинной памятью (МП – автоматов)
Цель работы: выработка навыков построения МП–автоматов для распознания множества А или трансляции множества А входных цепочек в множество В выходных цепочек.
Ход работы
Построить в соответствии с вариантом МП–распознаватель или МП–транслятор для распознания множества А входных цепочек (или преобразования(трансляции) множества А входных цепочек в множество В выходных цепочек) и реализовать его в виде программы на С++.
Для этого:
1 Описать стратегию работы МП–распознавателя (МП–транслятора) с указанием множеств входных символов, магазинных символов, состояний и общей стратегии действий МП–распознавателя (МП–транслятора) при разборе заданного в варианте регулярного множества.
2 Составить управляющую таблицу в стандартном виде в соответствии с описанием в п.1.
3 Убедиться в правильности работы МП–автомата, распознав (преобразовав) пошагово несколько цепочек.
4 Привести полное описание МП–автомата.
5 Реализовать полученный МП–автомат в виде программы на С++ и продемонстрировать его работу.
Вариант 9
Построить МП–транслятор для следующего преобразования бинарных цепочек: A = {1(n) 0(2m) 1(n) } B = {0(2n+1) 1(m)}.
1.Стратегия работы
2.Управляющая таблица
3.Проверка работы МП-транслятора
Необработанная часть цепочки |
Обр.сим. |
Верх магазина |
Текущее состояние |
Сост. магазина |
действия |
Цепочка на выходе |
1110000111 ˧ |
1 |
|
|
|
,↓C,П,000 |
000 |
110000111 ˧ |
1 |
С |
|
C |
,↓C,П,00 |
00000 |
10000111 ˧ |
1 |
С |
|
С |
,↓C,П,00 |
0000000 |
0000111 ˧ |
0 |
С |
|
С |
,0,П,- |
0000000 |
000111 ˧ |
0 |
С |
|
С |
,0,П,1 |
00000001 |
00111 ˧ |
0 |
С |
|
С |
,0,П,- |
00000001 |
0111 ˧ |
0 |
C |
|
C |
,0,П,1 |
000000011 |
111 ˧ |
1 |
С |
|
С |
,↑С,П,- |
000000011 |
11 ˧ |
1 |
С |
|
С |
,↑С,П,- |
000000011 |
1˧ |
1 |
С |
|
С |
,↑С,П,- |
000000011 |
˧ |
˧ |
|
|
|
да |
|
4.Полное описание
= {0, 1, ˧}
{0, 1}
= {C, }
= {,,, }
Управляющая таблица в пункте №2
5.Блок-схема
6.Код
#include "conio.h"
#include "iostream"
#define N 100
using namespace std;
void main()
{
setlocale(LC_ALL, "Russian");
char input[N], Vmp[10] = "#";
int i = 0, n = 0, S = 1, l = 0;
cout << "Ввести цепочку( 1 - нечетное количество, 0 - четное кол., 1 - такое же количетсов как и в 1)" << endl;
cin >> input;
while (i < strlen(input))
{
if (input[i] == '1' && Vmp[0] == '#' && S == 1) // Вталкиваем С и выводим '000'
{
Vmp[0] = 'C';
Vmp[1] = '#';
cout << "000";
}
else
if (input[i] == '1' && Vmp[0] == 'C' && S == 1) // Вталкиваем С и выводим '00'
{
for (int j = 0; j < 9; j++)
if (Vmp[i] == '#')
{
Vmp[j] = 'C';
Vmp[j + 1] = '#';
break;
}
cout << "00";
}
else
if (input[i] == '0' && Vmp[0] == 'C' && S == 1) // Переход S1->S4
{
S = 4;
l++;
}
else
if (l % 2 != 0 && input[i] == '0' && Vmp[0] == 'C' && S == 4) // Переходим S4->S2 и выводим '1'
{
S = 2;
cout << "1";
l++;
}
else
if (l % 2 == 0 && input[i] == '0' && Vmp[0] == 'C' && S == 2) // Переходим S2->S4
{
S = 4;
l++;
}
else
if (input[i] == '1' && Vmp[0] == 'C' && S == 4) // Выталкиваем С и переходим S4->S3
{
S = 3;
for (int j = 0; j < 9; j++)
if (Vmp[j] == '#')
{
Vmp[j - 1] = '#';
Vmp[j] = ' ';
break;
}
}
else
if (input[i] == '1' && Vmp[0] == 'C' && S == 3) // Выталкиваем С
{
for (int j = 0; j < 9; j++)
if (Vmp[j] == '#')
{
Vmp[j - 1] = '#';
Vmp[j] = ' ';
break;
}
}
else break;
i++;
}
if (Vmp[0] == '#' && S == 3) //Если МП пуст – цепочка допущена
cout << endl << "Цепочка удолетворяет условие" << endl;
else
cout << endl << "Цепочка не удолетворяет условие" << endl;
_getch();
}
7.Результат
8.Вывод: выработал навыки построения МП–автоматов для распознания множества А или трансляции множества А входных цепочек в множество В выходных цепочек.