Табличный метод структурного синтеза конечных автоматов

 

Содержание


Введение

1. Синтез конечных автоматов

1.1 Основные понятия и определения

1.2 Задания конечного автомата

2. Элементарные автоматы

3. Табличный метод структурного синтеза конечных автоматов

3.1 Структурный синтез

3.2 Построение синтеза функций возбуждения элементарных автоматов

3.3 Комбинационный синтез конечных автоматов

4. Тестирование программы

Выводы

Список использованных источников

Приложения

Введение


Потребность в вычислениях возникла у людей на самых ранних стадиях развития человеческого общества. Причем с самого начала для облегчения счета люди использовали различные приспособления. Многие из них были весьма интересными и остроумными по принципу действия, но все они обязательно требовали, чтобы в процессе вычислений активно участвовал человек-оператор. Качественно новый этап развития вычислительной техники наступил с изобретением и созданием электронных вычислительных машин, которые работают автоматически, без участия человека, в соответствии с заранее заданной программой.

В настоящее время электронные вычислительные машины в основном используются для решения сложных математических и инженерных задач, в качестве управляющих машин в промышленности и военной технике, а так же в сфере обработки информации.

Теория автоматов - раздел дискретной математики, изучающий абстрактные автоматы - вычислительные машины, представленные в виде математических моделей - и задачи, которые они могут решать. Теория автоматов наиболее тесно связана с теорией алгоритмов: автомат преобразует дискретную информацию по шагам в дискретные моменты времени и формирует результат по шагам заданного алгоритма.

Для формального описания узлов ЭВМ при их анализе и синтезе используется аппарат алгебры логики. Основные положения алгебры логики разработал в XIX в. английский математик Джордж Буль. Алгебру логики называют также булевой алгеброй.

Логические элементы - устройства, предназначенные для обработки информации в цифровой форме (последовательности сигналов высокого - "1" и низкого - "0" уровней в двоичной логике, последовательность "0", "1" и "2" в троичной логике, последовательности "0", "1", "2", "3", "4", "5", "6", "7", "8"и "9" в десятичной логике).

Триггер - это устройство последовательного типа с двумя устойчивыми состояниями равновесия, предназначенное для записи и хранения информации. Под действием входных сигналов триггер может переключаться из одного устойчивого состояния в другое. При этом напряжение на его выходе скачкообразно изменяется.

Как правило, триггер имеет два выхода: прямой и инверсный. Число входов зависит от структуры и функций, выполняемых триггером. По способу записи информации триггеры делят на асинхронные и синхронизируемые (тактируемые). В асинхронных триггерах информация может записываться непрерывно и определяется информационными сигналами, действующими на входах в данный момент времени. Если информация заносится в триггер только в момент действия так называемого синхронизирующего сигнала, то такой триггер называют синхронизируемым или тактируемым. Помимо информационных входов тактируемые триггеры имеют тактовый вход синхронизации. В цифровой технике приняты следующие обозначения входов триггеров:- раздельный вход установки в единичное состояние (напряжение высокого уровня на прямом выходе Q);- раздельный вход установки в нулевое состояние (напряжение низкого уровня на прямом выходе Q);- информационный вход (на него подается информация, предназначенная для занесения в триггер);- вход синхронизации;

Т - счетный вход.

Наибольшее распространение в цифровых устройствах получили RS-триггер с двумя установочными входами, тактируемый D-триггер и счетный Т-триггер.

Регистр - последовательное логическое устройство, используемое для хранения n-разрядных двоичных слов (чисел) и выполнения преобразований над ними.

Регистр представляет собой упорядоченную последовательность триггеров, число которых соответствует числу разрядов в слове. С каждым регистром обычно связано комбинационное цифровое устройство, с помощью которого обеспечивается выполнение некоторых операций над словами.

Фактически любое цифровое устройство можно представить в виде совокупности регистров, соединённых друг с другом при помощи комбинационных цифровых устройств.

Основой построения регистров являются D-триггеры, RS-триггеры.

конечный автомат комбинационный синтез

1. Синтез конечных автоматов


1.1 Основные понятия и определения


Автоматом называется дискретный преобразователь информации, способный принимать различные состояния, переходить под воздействием входных сигналов из одного состояния в другое и выдавать выходные сигналы. Если множество состояний автомата, а так же множества входных и выходных сигналов конечны, то автомат называется конечным автоматом.

Понятие состояния введено в связи с тем, что часто возникает необходимость в описании поведения систем, выходные сигналы которых зависят не только от состояния входов в данный момент времени, но и от некоторых предысторий, т.е. от сигналов, которые поступали на входы системы ранее. Состояния как раз и соответствуют некоторой памяти о прошлом, позволяя устранить время как явную переменную и выразить выходные сигналы как функцию состояний и входов в данный момент времени.

Информацию, поступающую на вход автомата, а так же выходную информацию принято кодировать конечной совокупностью символов. Эту совокупность называют алфавитом, отдельные символы, образующие алфавит - буквами, а любые упорядоченные последовательности букв данного алфавита - словами в этом алфавите.

Например. В алфавите X = (x1, x2), состоящем из двух букв, словами будут: x1, x2, x1x1, x1x2, x2x1,x2x2, x1x1x1, и т.д.

Наряду со словами, состоящими не менее чем из одной буквы, введем слово, не содержащее ни одной буквы, которую будем обозначать символом е и называть пустым словом или пустой буквой.

Математической моделью реального конечного автомата является абстрактный автомат, который имеет один входной канал и один выходной канал


. ?A (a0,a1,an) ?y (y1,y2,…,yk)

Рисунок 1.1 - абстрактная модель автомата


Автомат функционирует в дискретные моменты времени, интервал между которыми Т называется тактом. При этом в каждый дискретный момент времени на вход автомата поступает одна буква входного алфавита, автомат переходит из одного состояния в другое и выдается одна буква выходного алфавита. В зависимости от того, как задается длительность такта Т, различают автоматы синхронного действия (T = const) и асинхронного действия (T № const). Мы будем рассматривать, в основном, синхронные автоматы, функционирующие в дискретные моменты времени, которые можно обозначить целыми не отрицательными натуральными числами, t=0,1,2,3,…., имеющими смысл номера такта.


1.2 Задания конечного автомата


Для задания конечного автомата S необходимо задавать совокупность из пяти объектов: S (A, X, Y, d, d), где= {a0,a1,a2,.,an} - множество внутренних состояний автомата,= {x1, x2,…, xm} - множество входных сигналов (входной алфавит), Xi буква входного алфавита, Y = {y1, y2,…, yk} - множество выходных сигналов (выходной алфавит), d - функция переходов, определяющая состояние автомата a (t+1), в котором автомат будет находиться в момент времени (t+1), в зависимости от состояния автомата a (t) и входного сигнала x (t) в момент времени t, т.е. a (t+1) = d [a (t),x (t)], l - функция выходов, определяющая значение выходного сигнала y (t) в зависимости от состояния автомата a (t) и входного сигнала x (t) в момент времени t, т.е. y (t) = l [a (t), x (t)]. Автомат работает следующим образом: в каждый момент времени t он находится в определенном состоянии a (t) из множества А возможных состояний, причем в начальный момент времени t = 0, он всегда находится в состоянии a (t = 0) = a0. В момент времени t автомат воспринимает входной сигнал x (t), выдает выходной сигнал y (t) = l [a (t), x (t)] и переходит в следующее состояние a (t+1) = d [a (t), x (t)]. Другими словами, абстрактный автомат каждой паре символов a (t) и x (t) ставит в однозначное соответствие пару символов a (t+1) и y (t). Такие автоматы называют детерминированными. Преобразование информации в детерминированных автоматах подчиняется следующим условиям:

. Любое входное слово длинною l букв, преобразуется в выходное слово той же длины.

. Если каждый раз перед подачей входных сигналов автомат находится в одном и том же состоянии, то при совпадении в двух входных словах первых l1 букв, в выходных словах первые l1 букв тоже совпадут.

Кроме детерминированных автоматов существуют вероятностные или стохастические автоматы, в которых переход из одного состояния в другое под воздействием случайных или детерминированных входных сигналов происходит случайно. Работа таких автоматов описывается уже матрицей переходов d, элементами которой являются вероятности переходов из одного состояния в другое.

Мы будем изучать детерминированные автоматы.

Применяемые на практике автоматы принято разделять на два класса: - это автоматы Мили и автоматы Мура, названные так по имени американских ученых, которые впервые начали их изучать.

Закон функционирования автоматов Мили описывается следующей системой уравнений:


a (t + 1) = d [a (t),x (t)](t) = l [a (t),x (t)]

t = 0,1,2,3…


Работа автоматов Мура задается следующими уравнениями:


a (t + 1) = d [a (t),x (t)](t) = l [a (t)]


Отличительной особенностью автоматов Мили является то, что их выходные сигналы зависят как от состояния автомата, так и от значения входного сигнала. В автоматах Мура выходные сигналы y (t) в каждый дискретный момент времени t однозначно определяются состоянием автомата в тот же момент времени и не зависят от значения входного сигнала.

2. Элементарные автоматы


В настоящее время в вычислительной технике, как правило, используются элементарные автоматы, имеющие следующие особенности:

. Элементарные автоматы являются автоматами Мура с двумя внутренними состояниями.

. Автомат выдает два различных выходных сигнала, соответствующих двум его внутренним состояниям. В дальнейшем состояния автомата и его выходные сигналы будем обозначать одной буквой Q и кодировать цифрами 0 и 1.

. Элементарные автоматы могут иметь в общем случае несколько физических входов, на каждый из которых могут подаваться сигналы, закодированные цифрами 0 и 1.


Рисунок 2.1 ? триггер


В качестве элементарных автоматов в вычислительной технике используются, в основном, триггеры различных типов. Рассмотрим некоторые из них:

1.Т-триггер <#"center">3. Табличный метод структурного синтеза конечных автоматов


3.1 Структурный синтез


Структурный синтез конечных автоматов заключается в выборе типов элементарных автоматов, в составлении возбуждения каждого элементарно автомата и функций кодированных выходов заданного автомата.

На этапе структурного синтеза выбираем также способ кодирования состояний и выходных сигналов заданного автомата через состояния и выходные сигналы элементарных автоматов, в результате чего составляют кодированные таблицы переходов и выходов.

Функции возбуждения элементарных автоматов и функции выходов получаются на основе кодированной таблицы переходов и выходов.

Рассмотрим примеры синтеза, которые позволяют сформулировать общий алгоритм структурного синтеза конечных автоматов.

Пусть необходимо синтезировать автомата Мили, заданный совмещенной таблицей переходов и выходов.


Таблица 3.1 - Автомат Мура

xj\aia0a1a2x1a1/y1a1/y2a1/y2x2a2y3a2/y3a0/y1

В качестве элементарных автоматов будем использовать JK-триггера, а в качестве логических элементов - элементы И, ИЛИ, НЕ. Итак, имеем A={a0, a1, a2}; X={x1, x2}; Y={y1, y2, y3}. Здесь n=2, n+1=3; m=2, k=3.

Перейдем от абстрактного автомата к структурному, для чего определим количество элементов памяти R и число входных L и выходных N каналов.


R =] log (n+1) [=] log 3 [= 2=] log m [=] log 2 [= 1

R =] log k [=] log 3 [= 2.


Таким образом, необходимо иметь два элементарных автомата Q1 и Q2 (т.к. R=2), один входной канал b1 и два выходных канала Z1 и Z2.

Закодируем состояния автомата, входные и выходные сигналы совокупностью двоичных сигналов.


Таблица 3.2 - Таблица кодирования состояний автомата.

Сост. элем. авт. Сост. задан. Абстрактн. авт. Q1Q2a000a101a210

Таблица 3.3 - Таблица кодирования входных сигналов.

Вх. сигн. структ. Авт. Вх. сигн. задан. автd1X10X21

Таблица 3.4 - Таблица кодирования выходных сигналов

Вх. сигн. структ. авт Вх. сигн. задан. автZ1Z2Y100Y201Y310

Поэтому автомат имеет три состояния, то комбинация состояний элементарных автоматов 11 не используется и является запрещенной (автомат в это состояние никогда не попадет). Здесь и в дальнейшем будем использовать естественное кодирование, когда наборы значений двоичных переменных расписываются в порядке возрастания их номеров. С учетом кодирования перерисуем совмещенную таблицу переходов и выходов абстрактного автомата.


Таблица 3.5 - Выходов конечного автомата Мура

Xj\ai000110001/0001/0101/01110/1010/1000/00

В таблицах кодирования выходные каналы Z1 и Z2 называются физическими выходами автомата.

Пользуясь таблицами кодирования можно на основе заданных переходов и выходов построить кодированные таблицы переходов и выходов.

Кодированная таблица переходов определяет зависимость состояний Qi (t+1) элементарных автоматов в момент времени (t+1) от значения входного сигнала и внутренних состояний автоматов в предшествующий момент времени t. Т.е.


Qi (t+1) = fi [ (Q1 (t), Q2 (t), …, Qr (t),


В кодированной таблице выходов - выходные сигналы Zl (t) определяются в зависимости от значения входных сигналов и внутренних состояний в момент времени t


Таблица 3.6 - Формирование классов эквивалентности

t1 (t) Q1 (t) Q2 (t) Q1 (t+1) Q2 (t+1) Z1 (t) Z2 (t) 000010000101010100101011----100101010110101100000111----

Эти функции являются переключательными, поскольку значения функции и ее аргументов определены в один и тот же момент времени t.


3.2 Построение синтеза функций возбуждения элементарных автоматов


Основная задача, решаемая в процессе структурного синтеза - построение синтеза функций возбуждения элементарных автоматов, которая определяет значения сигналов на входах элементарных автоматов, необходимые для обеспечения переходов автомата из одного состояния в другое. При построение этой таблицы используется матрица переходов выбранных элементарных автоматов, в нашем случае JK-триггеров. С помощью матрицы переходов заполняются столбцы таблицы функций возбуждения. В строках этой таблицы записываются значения Ji и Ki, обеспечивающие нужный переход.


Таблица 3.7 - Формирование классов эквивалентности

JKQ (t) Q (t+1) 0b1001b201b3110b4011

Таблица 3.8 - Формирование классов эквивалентности

t1 (t) Q1 (t) Q2 (t) Q1 (t+1) Q2 (t+1) J1 (t) K1 (t) J2 (t) K2 (t) 000010b1b001010bb001001B11b011------100101b0b101101bb111000B10b111------

Например, переход Q1 (t) из 0 в 0 обеспечивается подачей на вход J сигнала 0, а значение сигнала на входе K - безразлично.

Таким образом, получим значения входных сигналов J и K элементарных автоматов, которые зависят как от значения входного сигнала так и от состояния автомата в тот же момент времени, что и Qi и B (т.е. в t).

Поскольку функции возбуждения J (t) и K (е) определенны в тот же момент времени, что и их аргументы Q1 (t), Q2 (t) и B1 (t), то эти функции являются переключательными.

В результате мы получим систему переключательных функций Z1 (t), Z2 (t), J1 (t), K1 (t), J2 (t) и K2 (t) заданных в виде таблиц их истинности.


3.3 Комбинационный синтез конечных автоматов


Следующий этап - комбинационный синтез конечных автоматов. На этом этапе по полученным переключательным функциям синтезируются комбинационные схемы. Очевидно, задача комбинационного синтеза конечных автоматов полностью совпадает с задачей синтеза логических схем, которую мы уже рассматривали. Обычно полученные переключательные функции минимизируют и представляют в булевом базисе, для каждой из которых построим диаграмму Вейча.


Таблица 3.9, 3.10 - комбинационный синтез конечных автоматов

J100bBJ21BB111bb0bb0K1BBB1K2B0BBBBb1B1bB

Таблица 3.9, 3.10 - комбинационный синтез конечных автоматов

Z100B011b0Z201B100b0

Обычно полученную систему ПФ минимизируют совместно. Однако совместная минимизация всех ПФ представляет собой достаточно трудоемкую и длительную операцию, применимую, в общем случае, при использовании машины. В результате минимизации мы получим следующую схему конечного автомата.

Функциональные схемы, получаемые в результате структурного синтеза, в дальнейшем на этапе инженерной доработки подвергаются изменениям. Эти изменения связаны с тем, что добавляются специальные цепи, необходимые для работы разработанной схемы в составе других схем ЦВМ. Например, в схеме регистра сдвига информации добавляется цепь "установка в 0". Другие изменения связаны с особенностью физического представления информации в ЦВМ, с особенностями логических элементов и с техническими особенностями логических элементов и с техническими особенностями конечных автоматов.

4. Тестирование программы


На основании описанного алгоритма на языке C++ в среде Microsoft Visual Studio.net 2012 был разработан программный продукт Курсова. Использование данного продукта позволяет минимизировать автомат Мили. В качестве примера был использован конечный автомат. Исходными данными для работы программы является количество состояний и знаков входного алфавита.

Для начала работы программисту стоит запустить файл Курсова. exe. После запуска появляется окно пользовательского интерфейса (рис.3.1). Интерфейс программы построен в стиле однооконного приложения.

Рассмотрим назначения каждого оконного элемента.

Два поля для ввода

Две кнопки для манипуляции

Одно поле для вывода


Рисунок 3.1 - Начальное окно приложения


При вводе данных надо нажать на кнопку "Построить таблицу КА". При нажатии на кнопку появится поля для ввода данных (рис 3.2).


Рисунок 3.2 - Построить таблицу КА


При нажатии кнопки "Минимизировать КА" минимизированный автомат будет выведен в поле для вывода (рис. 3.3).


Рисунок 3.3 - Вывод


Выводы


В курсовой работе был рассмотрен основные понятия теории Конечных автоматов. Был запрограммирован алгоритм минимизации КА, протестирована программа, обработан список литературы. По полученным результатам, обработки материала, можно сделать вывод, что минимизировать конечные автоматы возможно.

Сделав такой вывод, мы выполнили цель данной работы.


Список использованных источников


1. Абрамов, Л.А. Математическое программирование [Текст] / Л.А. Абрамов, В.Ф. Капустин ? Л.: Изд-во ЛГУ, 1981. ? 328 с.

. Белоусова, Г.С. Линейное программирование. Учебное пособие [Текст] / Г.С. Белоусова ? Красноярск: Наука, 1975. ? 107 с.

. Кузнецов, Ю.Н. Математическое программирование: Учебное пособие [Текст] / Ю.Н. Кузнецов - 2-е изд., перераб. и доп. - М.: Высшая школа, 1980. ? 300 с.

. Ашманов, С.А. Линейное программирование [Текст] / С.А. Ашманов - М.: Наука. 1969. - 240 с.

. Габасов, Р.И. Методы линейного программирования [Текст] / Р.И. Габасов, Ф.М. Кириллова - Минск: Наука. 1977. - 174 с.

6. Голованова, В.Н. Экономическая оценка инженерных решений [Текст] / В.Н. Голованова. - ХАИ, 1999. - 135 с.


Приложения


Приложение А


Листинг прогаммы

#pragma once

struct C

{*Nomber;*Znach;

};Курсова {namespace System;namespace System:: ComponentModel;namespace System:: Collections;namespace System:: Windows:: Forms;namespace System:: Data;namespace System:: Drawing;ref class Form1: public System:: Windows:: Forms:: Form

{:(void)

{();

}:

~Form1 ()

{(components)

{components;

}

}: System:: Windows:: Forms:: TextBox^ textBox1;:: System:: Windows:: Forms:: TextBox^ textBox2;: System:: Windows:: Forms:: LinkLabel^ linkLabel1;: System:: Windows:: Forms:: LinkLabel^ linkLabel2;: System:: Windows:: Forms:: Button^ button1;: System:: Windows:: Forms:: Label^ label1;: System:: Windows:: Forms:: Button^ button2;: System:: Windows:: Forms:: TextBox^ textBox3;::: ComponentModel:: Container ^components;

#pragma region Windows Form Designer generated codeInitializeComponent (void)

{>textBox1 = (gcnew System:: Windows:: Forms:: TextBox ());>textBox2 = (gcnew System:: Windows:: Forms:: TextBox ());>linkLabel1 = (gcnew System:: Windows:: Forms:: LinkLabel ());>linkLabel2 = (gcnew System:: Windows:: Forms:: LinkLabel ());>button1 = (gcnew System:: Windows:: Forms:: Button ());>label1 = (gcnew System:: Windows:: Forms:: Label ());>button2 = (gcnew System:: Windows:: Forms:: Button ());>textBox3 = (gcnew System:: Windows:: Forms:: TextBox ());>SuspendLayout ();

//

// textBox1

// >textBox1->Location = System:: Drawing:: Point (-3, - 1);>textBox1->Name = L"textBox1";>textBox1->Size = System:: Drawing:: Size (78, 20);>textBox1->TabIndex = 0;

//

// textBox2

// >textBox2->Location = System:: Drawing:: Point (-3, 24);>textBox2->Name = L"textBox2";>textBox2->Size = System:: Drawing:: Size (78, 20);>textBox2->TabIndex = 1;

//

// linkLabel1

// >linkLabel1->AutoSize = true;>linkLabel1->Location = System:: Drawing:: Point (86,2);>linkLabel1->Name = L"linkLabel1";>linkLabel1->Size = System:: Drawing:: Size (160, 13);>linkLabel1->TabIndex = 2;>linkLabel1->TabStop = true;

this->linkLabel1->Text = L"Ведите количество состояний";

//

// linkLabel2

// >linkLabel2->AutoSize = true;>linkLabel2->Location = System:: Drawing:: Point (86, 27);>linkLabel2->Name = L"linkLabel2";>linkLabel2->Size = System:: Drawing:: Size (163, 13);>linkLabel2->TabIndex = 3;>linkLabel2->TabStop = true;

this->linkLabel2->Text = L"Введите количество эл. вх. ал. ";

//

// button1

// >button1->Location = System:: Drawing:: Point (350,8);>button1->Name = L"button1";>button1->Size = System:: Drawing:: Size (143, 36);>button1->TabIndex = 4;>button1->Text = L"Построить таблицу КА";>button1->UseVisualStyleBackColor = true;>button1->Click += gcnew System:: EventHandler (this, &Form1:: button1_Click);

//

// label1

// >label1->AutoSize = true;>label1->Location = System:: Drawing:: Point (3, 57);>label1->Name = L"label1";>label1->Size = System:: Drawing:: Size (26, 13);>label1->TabIndex = 5;>label1->Text = L"G (x)";

//

// button2

// >button2->Location = System:: Drawing:: Point (350, 52);>button2->Name = L"button2";>button2->Size = System:: Drawing:: Size (142, 33);>button2->TabIndex = 7;>button2->Text = L"Минимизировать КА";>button2->UseVisualStyleBackColor = true;>button2->Click += gcnew System:: EventHandler (this, &Form1:: button2_Click);

//

// textBox3

// >textBox3->Location = System:: Drawing:: Point (336, 165);>textBox3->Multiline = true;>textBox3->Name = L"textBox3";>textBox3->Size = System:: Drawing:: Size (155, 20);>textBox3->TabIndex = 8;

//

// Form1

// >AutoScaleDimensions = System:: Drawing:: SizeF (6, 13);>AutoScaleMode = System:: Windows:: Forms:: AutoScaleMode:: Font;>ClientSize = System:: Drawing:: Size (491, 346);>Controls->Add (this->textBox3);>Controls->Add (this->button2);>Controls->Add (this->label1);>Controls->Add (this->button1);>Controls->Add (this->linkLabel2);>Controls->Add (this->linkLabel1);>Controls->Add (this->textBox2);>Controls->Add (this->textBox1);>Name = L"Form1";>Text = L"Form1";>Load += gcnew System:: EventHandler (this, &Form1:: Form1_Load);>ResumeLayout (false);>PerformLayout ();

}

#pragma endregion<TextBox^>^ msv;<TextBox^>^ msv1;**massA;**massA1;**massB;S;F;Per;: System:: Void Form1_Load (System:: Object^ sender, System:: EventArgs^ e) {>Text = "Курсова ";

}: System:: Void button1_Click (System:: Object^ sender, System:: EventArgs^ e) {X,Y;= 0;Число_ли1 = Single:: TryParse (textBox1->Text,:: Globalization:: NumberStyles:: Number,:: Globalization:: NumberFormatInfo:: CurrentInfo, X);Число_ли2 = Single:: TryParse (textBox2->Text,:: Globalization:: NumberStyles:: Number,:: Globalization:: NumberFormatInfo:: CurrentInfo, Y);

if ( (Число_ли1 == false) || (Число_ли2 == false))

{->Text = "Следует вводить числа";

linkLabel1->ForeColor = Color:: Red;;

}

// // // // // // // // // // // // // // // // // // // // // // // // // // x,y,tb,tr;= (int) (X);= (int) (Y);= x; F = y;=new int* [x];=new int* [x];=new int* [x];(int i=0; i<x; i++)

{[i] =new int [y];[i] =new int [y];[i] =new int [y];

}=0;=0;

// // // // // // // // // // // // // // // // // // // // // // // /= gcnew array<TextBox^> (x*y);(int i = 0; i < msv->Length; i++)

{ if (i%x==0) {tb=tb+20; tr = 0; };[i] = gcnew TextBox ();[i] - >Location = System:: Drawing:: Point (tb,70+20*tr);[i] - >Name = i. ToString ();[i] - >Size = System:: Drawing:: Size (20, 20);[i] - >TabIndex = 0;>Add (msv [i]);++; }

// // // // // // // // // // // // // // // // // // // // // // // // // // // // // /^ label2;= gcnew System:: Windows:: Forms:: Label ();->Name = "label2";->Visible = true;->AutoSize = true;->Location = System:: Drawing:: Point (tb+50, 57);->Text = L"F (x)";->TabIndex = 0;>Add (label2);

// // // // // // // // // // // // // // // // // // // // // // // // // // // // // /= tb +40;= gcnew array<TextBox^> (x*y);(int i = 0; i < msv->Length; i++)

{ if (i%x==0) {tb=tb+20; tr = 0; };[i] = gcnew TextBox ();[i] - >Location = System:: Drawing:: Point (tb,70+20*tr);[i] - >Name = i. ToString ();[i] - >Size = System:: Drawing:: Size (20, 20);[i] - >TabIndex = 0;>Add (msv1 [i]);++; }

}: System:: Void button2_Click (System:: Object^ sender, System:: EventArgs^ e) {->Size = Drawing:: Size (400, 200);z=0;*Z,*Z1;= new Single [S*F];= new Single [S*F];(int i = 0; i < F; i++) {(int j=0; j<S; j++) {Число_ли2 =Single:: TryParse (msv [z] - >Text,:: Globalization:: NumberStyles:: Number,:: Globalization:: NumberFormatInfo:: CurrentInfo, Z [z]);[j] [i] = (int) (Z [z]);++;

}}=0;(int i = 0; i < F; i++) {(int j=0; j<S; j++) {Число_ли2 = Single:: TryParse (msv1 [z] - >Text,:: Globalization:: NumberStyles:: Number,:: Globalization:: NumberFormatInfo:: CurrentInfo, Z1 [z]);[j] [i] = (int) (Z1 [z]);++;

}}(int i = 0; i < S; i++) {(int j=0; j<F; j++) {[i] [j] = massA [i] [j]; }}

// // // // // // // // // // // // // // // // // // // // // // // // // // // // /*C1;= new C [S];(int i=0; i<S; i++)[i]. Znach=new int [S];

// // // // // // // // // // // // // // // // // // // // // // // // // /Per1=-1;(Per! =Per1)

{int r=0;(Per1==-1) {Per1=Per;(int i=0; i<S; i++) {(int z=i; z<S; z++) {(massB [i] [0] ==massB [z] [0])

{for (int d=0; d<F; d++) {(massB [i] [d]! =massB [z] [d]) {goto a1; }}}{goto a1; }(int b=0; b<S; b++) {(int x=0; x<S; x++) {(C1 [b]. Znach [x] ==z) {goto a1; }}}[Per]. Znach [r] =z;++;:;

}(int z=0; z<S; z++) {(C1 [Per]. Znach [z] >-1) { Per++; break; }}}(int i=0; i<S; i++)

{for (int j=0; j<F; j++) {(int o=0; o<Per; o++) {(int x=0; x<S; x++)(massA1 [i] [j] ==C1 [o]. Znach [x])

{massA [i] [j] =o; break; }}}}

} // // // // // // // // // // // // // // // // // // // // // // // // // { Per1=Per;=0;(int i=0; i<S; i++)

{for (int j=0; j<S; j++)

{C1 [i]. Znach [j] = (-1); }}

// // // // // // // // // // // // // // // // // // // // // // // // // =0;(int i=0; i<S; i++) {(int z=i; z<S; z++) {(massA [i] [0] ==massA [z] [0])

{for (int d=0; d<F; d++) {(massA [i] [d]! =massA [z] [d]) {goto a2; }}}{goto a2; }(int b=0; b<S; b++) {(int x=0; x<S; x++) {(C1 [b]. Znach [x] ==z) {goto a2; }}}[Per]. Znach [r] =z;++;:;

}(int z=0; z<S; z++) {(C1 [Per]. Znach [z] >-1) { Per++; break; }}}(int i=0; i<S; i++)

{for (int j=0; j<F; j++) {(int o=0; o<Per; o++) {(int x=0; x<S; x++)(massA1 [i] [j] ==C1 [o]. Znach [x])

{massA [i] [j] =o; break; }}}}

}} // // // // // // // // // // // // // // // // // // // // // // // // // k=0;(int I=0; I<Per; I++)

{for (int j=0; j<S; j++) {(C1 [I]. Znach [j] >-1)

{for (int y=0; y<F; y++)

{massA [k] [y] =massA [C1 [I]. Znach [j]] [y]; }++;=S-1; }

}}(int i=0; i<S; i++) {(int j=0; j<S; j++) {(C1 [i]. Znach [j] >-1)

{(int z=0; z<Per; z++) {(int x=0; x<F; x++) {(C1 [i]. Znach [j] ==massA [z] [x])

{massA [z] [x] =C1 [i]. Znach [j]; }

}}}}}->AppendText (String:: Format ("Otvet: \r\n G (x) \r\n"));(int i=0; i<Per; i++)

{for (int j=0; j<F; j++) {->AppendText (String:: Format ("{0} \t",massA [i] [j])); }->AppendText (String:: Format ("\r\n")); }->AppendText (String:: Format ("F (x) \r\n"));(int i=0; i<Per; i++)

{for (int j=0; j<S; j++)(C1 [i]. Znach [j] >-1)

{(int c=0; c<F; c++)->AppendText (String:: Format ("{0} \t",massB [i] [c]));->AppendText (String:: Format ("\r\n"));

break;

}

}

// // // // // // // // // // // // // // // // // // // // // // // // // // // // }

};

}


Содержание Введение 1. Синтез конечных автоматов 1.1 Основные понятия и определения 1.2 Задания конечного автомата 2. Элементарные автоматы

Больше работ по теме:

КОНТАКТНЫЙ EMAIL: [email protected]

Скачать реферат © 2017 | Пользовательское соглашение

Скачать      Реферат

ПРОФЕССИОНАЛЬНАЯ ПОМОЩЬ СТУДЕНТАМ