Абстрактный автомат Мили

Курсовой проект - Компьютеры, программирование

Другие курсовые по предмету Компьютеры, программирование

ема автомата на JK-триггерах.

 

.4 Проверка по первой части курсового проекта

 

97 ЛапинРИ 5430200097=1,5/2,6/3/4/7,8;=y2y1y2y3y2y1y1y2;;

Var#97 Fio:ЛапинРИ Chiffr:5430200097results:

Automaton equivalence classes: Correct!output sequence: Correct!

******END******

 

1.5 Моделирование работы абстрактного автомата

 

. Листинг программы на языке С++:

#include

#include

#include

#include int cAC=15; //цвет активного меню

const int cNOTAC=0; //цвет не активного меню

const int cDISP=1; //цвет дисплея

int arrs1[3][8]={{3,4,2,7,3,4,5,5},{2,8,4,1,6,8,3,3},{4,1,7,3,4,5,6,2}};

int arry1[3][8]={{3,1,3,1,3,1,3,3},{2,3,2,3,2,3,2,2},{1,2,1,2,1,2,1,1}};

int arrs2[3][8]={{3,4,2,7,0,0,1,0},{2,7,4,1,0,0,3,0},{4,1,7,3,0,0,2,0}};

int arry2[3][8]={{3,1,3,1,0,0,3,0},{2,3,2,3,0,0,2,0},{1,2,1,2,0,0,1,0}};

void calc(int);tabl(int);obtabl(char,char,char,char,char,char,int);PrintMenu(int,int,int,int);main()

{i,c;flag=0;sScr[4000];

{name[51];x;y;

}[3]={

{ " 1. Исходные данные ",2, 5 },

{ " 2. Минимизированный автомат ",2, 7 },

{ " 3. Выход ",2, 9 }

};(7);(cDISP);();(16,15,64,26);(16,15,64,26);(4);(15);(2,2);(" ГЛАВНОЕ МЕНЮ ");(cNOTAC);(2);(i=0; i<3; i++)

{(menu[i].x,menu[i].y);

cprintf("%s",menu[i].name);

}

textcolor(cAC); //изменение цвета активной строки меню

gotoxy(menu[flag].x,menu[flag].y);

cprintf("%s",menu[flag].name);(3,5);(1)

{=getch();(16,15,64,26);(2);(c)

{

case 72 : //движение по меню вверх

textcolor(cNOTAC);

gotoxy(menu[flag].x,menu[flag].y);

cprintf("%s",menu[flag].name);

gotoxy(3,menu[flag].y);

flag--; //переменная, определяющая № подсвеченной строки

if(flag<0)=2;(cAC);

gotoxy(menu[flag].x,menu[flag].y);

cprintf("%s",menu[flag].name);(3,menu[flag].y);; 80 : //движение по меню вниз

textcolor(cNOTAC);

gotoxy(menu[flag].x,menu[flag].y);

cprintf("%s",menu[flag].name);

gotoxy(3,menu[flag].y);++;

if(flag>2)=0;(cAC);

gotoxy(menu[flag].x,menu[flag].y);

cprintf("%s",menu[flag].name);(3,menu[flag].y);;13:(1,1,80,50,&sScr);(cDISP);(1,1,80,50);();(flag)

{0:1:(flag);;2:;

}();(1,1,80,50,sScr);(16,15,64,26);(3,menu[flag].y);

default:(3,menu[flag].y);

}

}

}

//определение функции вывода главного меню на экран

void PrintMenu(int x1,int y1,int x2,int y2)

{i,j;(x1,y1,x2+1,y2+1);(1,1);<<"\311"; // верхний левый угол(i=2; i<x2-x1+1; i++)

{

gotoxy(i,1);

cout<<"\315"; // верхняя горизонтальная линия

gotoxy(i,y2-y1+1);

cout<<"\315"; // нижняя горизонтальная линия

}

gotoxy(x2-x1+1,1);

cout<<"\273"; // верхний правый угол

for(j=2; j<y2-y1+1; j++)

{(1,j);<<"\272"; // левая вертикальная линия

gotoxy(x2-x1+1,j);

cout<<"\272"; // правая вертикальная линия

}

gotoxy(1,y2-y1+1);

cout<<"\310"; // левый нижний угол

gotoxy(x2-x1+1,y2-y1+1);

cout<<"\274"; // правый нижний угол

}

void calc(int flag)

{s[9],x[8],y[8],i;

{();

if(flag==0)

{<<"\n\n Абстрактный автомат Мили задан таблицей переходов/выходов\n\n";(8);<<"\n\nЭта таблица определяет функцию переходов автомата s(t+1) =

П[x(t),s(t)] и функцию выходов y(t)=B[x(t),s(t)].";<<"Здесь: s(t) - состояние, x(t) - входной, y(t) - выходной символ автомата в

момент времени t";

}

{<<"\n\n Минимизированное число состояний абстрактного

автомата\n\n";<<" Таблица переходов минимизируемого автомата\n\n";

tabl(5);

}(i=0;i<8;i++)[i]=y[i]=0;<<"\n\nВведите x через пробел (8 значений) и 0

(если введено меньше 8 значений):\nx = ";

for(i=0;i<8;i++)

{>>x[i];

if(x[i]==0);

}<<"\nВведите начальное состояние автомата s0: ";

cin>>s[0];(i=0;i<8;i++)

{(x[i]==0);(flag==0)

{[i]=arry1[x[i]-1][s[i]-1];[i+1]=arrs1[x[i]-1][s[i]-1];

}

{[i]=arry2[x[i]-1][s[i]-1];[i+1]=arrs2[x[i]-1][s[i]-1];

}

}<<"\n\nФункция выходов y: ";

for(i=0;i<8;i++)

{(y[i]==0);<<"y"<<y[i];

}

cout<<"\n\nЦепочка состояний s: ";

for(i=0;i<8;i++)

{(s[i+1]==0);<<"s"<<s[i];

}<<"\n\n\nПродолжение - Enter. ESC - Выход в главное меню.";

}(getch()!=27);

}tabl(int c)

{(\311,\315,\313,\315,\315,\273,c);<<" \272 x(t) \272";(c==5)<<" s(t) \272";<<" s(t) \272";(\272, ,\314,\313,\315,\271,c);<<" \272 \272";(int i=0;i<c;i++)

{(c==5&&i==4)<<" s7 \272";<<" s"<<i+1<<" \272";

}(i=0;i<3;i++)

{(\314,\315,\316,\316,\315,\271,c);<<" \272 x"<<i+1<<" \272";(int j=0;j<c;j++)

{(c==5)

{(j==4)<<" s"<<arrs2[i][6]<<"/y"<<arry2[i][6]<<" \272";<<" s"<<arrs2[i][j]<<"/y"<<arry2[i][j]<<" \272";

}<<" s"<<arrs1[i][j]<<"/y"<<arry1[i][j]<<" \272";

}

}(\310,\315,\312,\312,\315,\274,c);

}

obtabl(char a,char b,char c,char d,char e,char f,int k)

{<<"\n "<<a;(int i=0;i<6;i++)<<b;<<c;(int j=0;j<k;j++)

{(i=0;i<7;i++)<<e;<<d;

}<<"\b"<<f<<"\n";

}

2. Интерфейс программы

 

Рис. 1.5. Вид главного меню программы.

 

Рис. 1.6. Реакция исходного автомата на входное воздействие x2x1x3x1x3x3x1x2.

Рис. 1.7. Реакция минимизированного автомата на входное воздействие x2x1x3x1x3x3x1x2.

2. Микропрограммные автоматы на базе логических матриц

 

.1 Задание на вторую часть курсового проекта

 

2.2 Синтез микропрограммного автомата

 

Абстрактный синтез МПА

1. Составление графа функционирования по ТМА.

Состояниям Yi, в ТМА сопоставляются операторные вершины в графе функционирования ГФ. Связи между вершинами в ГФ, т. е. его ветви находятся по ТМА следующим образом.

). Задаемся некоторой вершиной Yi и находим в ТМА строку Yi.

). Если клетка YiYi не пуста, то вершина Yi должна иметь петлю. (Однако, на ГФ петли изображать не принято, но они подразумеваются. В этом случае на ГСА вслед за операторной вершиной Yi должна следовать ждущая вершина.)

Если в клетке YiYi указано временное условие , задающее выдержку времени, то символ ti указывается в скобках в вершине Yi. Это означает, что микрокоманда должна отрабатываться в течение временного интервала ti.

Если в клетке YiYi указано логическое условие то микрокоманда Yi должна выполняться до тех пор, пока не станет zi=1. Следователь