Добавил:
abhai2013@gmail.com Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ДМ / Lab3

.docx
Скачиваний:
17
Добавлен:
30.06.2018
Размер:
252.73 Кб
Скачать

Лабораторная работа № 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

С

С

,↑С,П,-

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.Вывод: выработал навыки построения МП–автоматов для распознания множества А или трансляции множества А входных цепочек в множество В выходных цепочек.

Соседние файлы в папке ДМ