Всё сдал! - помощь студентам онлайн Всё сдал! - помощь студентам онлайн

Реальная база готовых
студенческих работ

Узнайте стоимость индивидуальной работы!

Вы нашли то, что искали?

Вы нашли то, что искали?

Да, спасибо!

0%

Нет, пока не нашел

0%

Узнайте стоимость индивидуальной работы

это быстро и бесплатно

Получите скидку

Оформите заказ сейчас и получите скидку 100 руб.!


Методы минимизации логических функций

Тип Реферат
Предмет Математика
Просмотров
578
Размер файла
100 б
Поделиться

Ознакомительный фрагмент работы:

Методы минимизации логических функций

Содержание

Задание 1.Определить МДНФ логической функции устройства.

1.1 Составить таблицу соответствия (истинности) функции.

1.2 Перевести логическую функцию от табличной к аналитической форме в виде ДСНФ

1.3 Найти МДНФ различными методами.

1.3.1прямым (алгебраическим) преобразованием;

1.3.2методом Квайна;

1.3.3усовершенствованным методом Квайна (Квайна-Маккласки);

1.3.4методом карт Карно;

1.3.5методом неопределенных коэффициентов;

Задание 2. Составить алгоритм метода минимизации

2.1 Составить содержательный (словесный) алгоритм минимизации функции, разработать граф-схему алгоритма, разработать логическую схему алгоритма в нотации Ляпунова для метода Квайна.

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

2.3 Разработать рабочие программы по алгоритмам.

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

3.1 Выполнить синтез схемы по ДСНФ и МДНФ в базисе Буля с использованием двухвходовых логических элементов и интегральных микросхем серии 155.

3.2 Функцию МДНФ в базисе Буля полученную в первом задании представить в базисах Шеффера и Пирса.

3.3Обосновать выбор базиса по формулам МДНФ.

3.4 Реализовать в выбранном базисе логическую схему.

Задание 1.

1.1 Составить таблицу соответствия (истинности) функции.

Составим таблицу истинности для заданной функцииF(X1,X2,X3,X4).

X1X2X3X4F(X1, X2, X3, X4)

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

0

0

0

0

0

0

0

0

1

1

1

1

1

1

1

1

0

0

0

0

1

1

1

1

0

0

0

0

1

1

1

1

0

0

1

1

0

0

1

1

0

0

1

1

0

0

1

1

0

1

0

1

0

1

0

1

0

1

0

1

0

1

0

1

1

0

1

1

0

1

1

1

0

0

1

1

0

0

0

1

Матрицу ДСНФ получают путем удаления тех строк, где функция равна нулю. Для нашего случая получим:

X1X2X3X4

0

2

3

5

6

7

10

11

15

0

0

0

0

0

0

1

1

1

0

0

0

1

1

1

0

0

1

0

1

1

0

1

1

1

1

1

0

0

1

1

0

1

0

1

1


1.2Перевести логическую функцию от табличной к аналитической форме в виде ДСНФ.

Переведем логическую функцию от табличной к аналитической форме в виде ДСНФ.

F(X1X2X3X4) = X1X2X3X4 V X1X2X3X4 V X1X2X3X4 V X1X2X3X4 V X1X2X3X4

V X1X2X3X4 V X1X2X3X4 V X1X2X3X4 V X1X2X3X4.

1.3 Найти МДНФ различными методами.

1.3.1 Метод эквивалентных преобразований.

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

Проведем прямое алгебраическое преобразование, используя закон неполного склеивания.

F(X1X2X3X4) = X1X2X3X4 V X1X2X3X4 V X1X2X3X4 V X1X2X3X4 V X1X2X3X4 V

V X1X2X3X4 V X1X2X3X4 V X1X2X3X4 V X1X2X3X4 =

= (X1X2X3X4 V X1X2X3X4) V (X1X2X3X4 V X1X2X3X4)V(X1X2X3X4 V X1X2X3X4) V

V (X1X2X3X4 V X1X2X3X4) V (X1X2X3X4 V X1X2X3X4)V(X1X2X3X4 V X1X2X3X4) V

V (X1X2X3X4 V X1X2X3X4) V (X1X2X3X4 V X1X2X3X4)V(X1X2X3X4 V X1X2X3X4) V

V (X1X2X3X4 V X1X2X3X4) V (X1X2X3X4 V X1X2X3X4) =

= X1X2X4 V X1X2X3 V X1X3X4 V X2X3X4 V X1X3X4 V X2X3X4 V X1X2X4 V

V X1X2X3V X2X3X4 V X1X2X3 V X1X3X4 =

= (X1X2X3 V X1X2X3 V X1X3X4 V X1X3X4) V X1X2X4 V

V (X1X2X3 V X1X2X3 V X2X3X4 V X2X3X4) V X1X2X4 V

V (X1X3X4 V X1X3X4 V X2X3X4 V X2X3X4) =

= X1X3 V X2X3 V X3X4 V X1X2X4 V X1X2X4.

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

1.3.2 Метод Квайна

При минимизации по методу Квайна предполагается, что минимизируемая логическая функция задана в виде ДСНФ. Здесь используется закон неполного склеивания. Минимизация проводится в два этапа: нахождение простых импликант, расстановка меток и определение существенных импликант (Q-матрица).

ДСНФ, ранг 4

1

2

3

4

5

6

7

8

9

0000

0010

0011

0101

0110

0111

1010

1011

1111

Наборы 3-го ранга

1-2

2-3

2-5

2-7

3-6

3-8

4-6

5-6

6-9

7-8

8-9

00*0

001*

0*10

*010

0*11

*011

01*1

011*

*111

101*

1*11

1

2

3

4

5

6

7

8

9

10

11

Наборы 2-го ранга

2-8

2-10

3-5

4-6

5-11

6-9

0*1*

*01*

0*1*

*01*

**11

**11

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

Простые импликанты

1

2

3

4

5

0*1*

*01*

**11

00*0

01*1

Перенеся все выделенные строки в конечный массив, получим матрицу СДНФ. Алгебраическая запись СДНФ будет выглядеть следующим образом:


F(X1X2X3X4) = X1X3 V X2X3 V X3X4 V X1X2X4 V X1X2X4.

Эта же функция в нашем случае является и минимальной ДНФ.

1.3.3Метод Квайна-Маккласки

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

Распределим импликанты ДСНФ по индексам.

ДСНФИндекс i

1

2

3

4

5

6

7

8

9

0000

0010

0011

0101

0110

0111

1010

1011

1111

0

1

2

2

2

3

2

3

4

Распределенные наборы 4-го ранга
i=0i=1i=2i=3i=4
00000010

0011

0101

0110

1010

0111

1011

1111

Сравнивая соседние группы и распределяя полученные наборы по положению символа ‘*’ получим:


Наборы 3-го ранга

1

2

3

4

5

6

7

8

9

10

11

00*0

001*

0*10

*010

0*11

*011

01*1

011*

*111

101*

1*11

Распределенные наборы 3-го ранга
1234

*010

*011

*111

0*10

0*11

1*11

00*0

01*1

001*

011*

101*

Распределенные наборы 2-го ранга
121424
**11*01*0*1*

Примечание. Во всех выше приведенных таблицах простые импликанты отмечены жирным шрифтом с подчеркиванием.

Анализируя, видим, что СДНФ примет следующий вид:

Простые импликанты

1

2

3

4

5

0*1*

*01*

**11

00*0

01*1


Или в алгебраической форме:

F(X1X2X3X4) = X1X3 V X2X3 V X3X4 V X1X2X4 V X1X2X4.

1.3.4Метод карт Карно.

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

Преимуществами метода карт Карно над другими методами являются:

А) простота отыскания склеивающихся компонент;

Б) простота выполнения самого склеивания;

В) нахождение всех минимальных форм функции.

Построим таблицу метода карт Карно.

X1X2X1X2X1X2X1X2
X3X4
X3X4
X3X4
X3X4

Теперь накроем совокупность всех квадратов с метками минимальным количеством правильных прямоугольников. Таких прямоугольников в нашем случае будет 5: три четырехклеточных и два двухклеточных. Этим прямоугольникам соответствуют следующие простые импликанты:

для первого – X3X4;

для второго – X1X3;

для третьего – X2X3;

для четвертого – X1X2X4;

для пятого – X1X2X4;


Минимальная ДНФ будет выглядеть так:

F(X1X2X3X4) = X1X3 V X2X3 V X3X4 V X1X2X4 V X1X2X4.

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

1.3.5 Метод неопределенных коэффициентов

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

В методе неопределенных коэффициентов используются законы универсального и нулевого множеств и законы повторения. В начале все коэффициенты неопределенны (отсюда и название метода).

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

Система приведена на следующей странице.

Приравняем все коэффициенты 0 в тех строках, которым соответствует 0 в векторе столбце. Затем приравняем 0 соответствующие коэффициенты в других строках. После этих преобразований система примет следующий вид:

V = 1

VVVVVV = 1

VVV V VV = 1

V = 1

VVV = 1

VVVVVV = 1

VVV = 1

VVVVV = 1

VVV = 1

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

= 1

= 1

= 1

= 1

= 1

Запишем теперь конъюнкции, соответствующие коэффициентам, равным единицам. Мы получим минимальную ДНФ.

F(X1X2X3X4) = X1X3 V X2X3 V X3X4 V X1X2X4 V X1X2X4.

Итак, мы получили несколькими способами минимальную ДНФ, Во всех случаях она получилась одинаковой, то есть любой из описанных методов может быть использован для минимизации функции. Однако эти методы существенно отличаются друг от друга как по принципу нахождения МДНФ, так и по времени исполнения. Для ручных расчетов очень удобен метод карт Карно. Он нагляден, не требует рутинных операций, а выбрать оптимальное расположение правильных прямоугольников не составляет большого труда. В то время как машинная реализация данного метода осложняется необходимостью нахождения оптимального расположения прямоугольников. Естественно применение других методов (метод Квайна, метод Квайна-Маккласки, метод неопределенных коэффициентов) для ручных расчетов нецелесообразно. Они больше подойдут для машинной реализации, так как содержат большое число повторяющихся простых операций.

Задание 2.

2.1 Схема алгоритма для метода Квайна

1. Начало.

2. Ввести матрицу ДСНФ исходной функции.

3. Проверить на склеиваемость i-ю (i=1,m-1: где m – количество строк в ДСНФ) и j-ую (j=i+1, m) строки. Если строки склеиваются, то перейти к пункту 6, в противном случае перейти к пункту 5.

4. Формировать массив простых импликант, предварительно пометив символом ‘*’ ту переменную, по которой данные строки склеиваются.

5. Перейти к пункту 2.

6. Строку, которая не склеилась ни с одной другой строкой записать в конечный массив.

7. Перейти к пункту 2.

8. Вывод полученной матрицы.

9. Конец.

Логическая схема алгоритма в нотации Ляпунова

1 1

VHV1Z1­V2¯V3V4VK

VH – начало.

V1 – ввести матрицу ДСНФ исходной функции.

V2 – формировать массив простых импликант, предварительно пометив символом ‘*’ ту переменную, по которой данные строки склеиваются.

V3 – строку, которая не склеилась ни с одной другой строкой записать в конечный массив.

V4 – вывод полученной матрицы.

Z1 – если строки склеиваются, то перейти к пункту 3, в противном случае перейти к пункту 5.

VK – конец.

Граф-схема алгоритма.


Описаниемашинныхпроцедур

Procedure Stuck(S1, S2: Diz; IndexS1, IndexS2 : byte);

Данная процедура склеивает два, передаваемых ей дизъюнкта. Дизъюнкты задаются в параметрах S1, S2. Индексы IndexS1, IndexS2 определяют индексы этих дизъюнктов в главном рабочем массиве . Алгоритм работы процедуры следующий: сначала ищется количество склеивающихся символов. Если их 0, то они одинаковые, и в конечный массив записывается только один из них. Если 1, то определяется местоположение символа, по которому данные две дизъюнкции склеиваются, и заменяем этот символ на ‘*’. Все полученные результаты заносятся в массив REZ.

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

2.2 Схема алгоритма для метода Петрика

1. Начало.

2. Ввести матрицу ДСНФ исходной функции и простые импликанты, полученные в методе Квайна.

3. Составить таблицу меток.

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

5. Произвести раскрытие скобок в полученном выражении с учетом законов поглощения.

6. Выбрать одну из полученных конъюнкций и представить ее как совокупность соответсвующих простых импликант.

7. Если выбранная комбинация не является минимальной, то перейти к пункту 6, в противном случае перейти к пункту 8.

8. Формировать МДНФ.

9. Вывод полученной матрицы.

10. Конец.

Логическая схема алгоритма в нотации Ляпунова.

1 1

VHV1V2V3V4¯V5Z1­V6V7VK


VH – начало.

V1 – ввести матрицу ДСНФ исходной функции и простые импликанты, полученные в методе Квайна.

V2 – составить таблицу меток.

V3 – по таблице меток построить конъюнкцию дизъюнкций, каждая из которых есть совокупность тех импликант, которые в данном столбце имеют метки.

V4 – произвести раскрытие скобок в полученном выражении с учетом законов поглощения.

V5 – выбрать одну из полученных конъюнкций и представить ее как совокупность соответсвующих простых импликант.

Z1 – если выбранная комбинация не является минимальной, то перейти к пункту 6, в противном случае перейти к пункту 8.

V6 – формировать МДНФ.

V7 – вывод полученной матрицы.

VK – конец.

Граф-схема алгоритма.


Описание машинных процедур

Procedure FormMatrix;

Данная процедура формирует матрицу меток путем попарного анализа дизъюнктов из ДСНФ и матрицы простых импликант. Если стравнение прошло успешно, то соответствующему элементу матрицы меток присваивается значение 1, в противном случае – значение 0.

Function Pokritie(var S: string16): boolean;

Данная функция проверяет, является ли данная комбинация простых импликант полной, то есть накрывает ли она все дизъюнкты матрицы ДСНФ. Это сравнение происходит следующим образом: вводится новый массив – массив соостветсвия столбцам. Каждому элементу нового массива сначала присваивается значение 0. Далее, пробегая все заданные строки матрицы,определяем в каких столбцах стоит 1 и в новом массиве ставим на соответсвующее место 1. Таким образом, если в векторе есть нули, значит данная комбинация дизъюнктов не накрывает полностью все столбцы матрицы. В этом случае функция возвращает значние False, в противном случае функция возвращает значение True.

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

1. Представление МДНФ в базисе Буля. В базисе Буля используется 3 логические схемы: НЕ, ИЛИ, И. Вот их графическое изображение:

ИЛИ
НЕ
И
X1 X1

__

X X X1VX2 X1*X2

X2 X2


Для аппаратной реализации минимальной ДНФ нам потребуется 3 ИМС серии К155 : одна ИМС К155ЛН1 (элементы НЕ), одна ИМС К155ЛЛ1 (элементы ИЛИ) и одна ИМС К155ЛИ1 (элементы И). Но в них все элементы не используются. Так в ИМС К155ЛН1 не используются 3 элемента НЕ Это можно использовать в том случае, когда один из элементов выйдет из строя и его нечем будет заменить. Надо будет только перепаять контакты на незадействованный элемент. Всего в базисе Буля используются 11 логических элементов.

2. Представление МДНФ в базисе Шеффера. Для того, чтобы реализовать минимальную ДНФ в базисе Шеффера, необходимо перевести базис Буля в базис Шеффера, в котором используется только один логический элемент: И-НЕ.

Формулы перевода из базиса Буля в базис Шеффера записываются следующим образом:


НЕ: X = X*X ИЛИ: X1VX2 = X1*X1 * X2*X2


И: X1*X2 = X1*X2 * X1*X2


Минимальная ДНФ выглядит так:

f(X1, X2, X3, X4) = X3X4VX2X3VX1X3VX1X2X4VX1X2X4;

Переведем ее в базис Шеффера с помощью указанных выше формул.


ОбозначимA = X3X4VX2X3VX1X3 = X3·( X4VX2VX1) = X3·X4·X4·X2·X1=


= X3·X4·X4·X2·X1·X2·X1.


B = X1X2X4VX1X2X4= X1·(X2·X4VX2·X4) = X1·X1·X2·X2·X4·X4·X2·X4.


Окончательно получим Y = A · B .

Отсюда видно, что для реализации минимальной ДНФ в базисе Шеффера требуется 12 элементов И-НЕ. Соответственно для аппаратной реализации нам потребуется 3 интегральные микросхемы К155ЛА3.

3. Представление МДНФ в базисе Пирса. Для того, чтобы реализовать минимальную ДНФ в базисе Пирса, необходимо как и в предыдущем пункте перевести МДНФ из базиса Буля в базис Пирса, в котором используется только один элемент ИЛИ-НЕ.

Формулы перевода записываются следующим образом:


НЕ: X = XVXИЛИ: X1VX2 = X1VX2 V X1VX2


И: X1*X2 = X1VX1 V X2VX2

Переведем МДНФ в базис Пирса. Введем обозначения:



A = X3X4VX2X3VX1X3 = X3·X4·X2·X3·X1·X3 = X3VX4VX2VX3VX1VX3.


B = X1·(X2X4VX2X4) = X1·(X2·X4·X2·X4) = X1·X2VX4VX2VX4 =


= X1VX2VX4VX2VX4.

Y = A V B.

Чтобы реализовать каждую отдельную логическую сумму нам потребуется 2 элемента ИЛИ-НЕ, т.е. для 4-х логических сумм, которые составляют функцию, нам потребуется 6 логических элементов.

Всего на реализацию МДНФ в базисе Пирса понадобится 16 логических элементов ИЛИ-НЕ, а для аппаратной реализации 4 ИМС серии К155 (К155ЛЕ1).

Итак, можно подвести итоги: на реализацию МДНФ в различных базисах требуется разное кол-во логических элементов, но целесообразно выбрать тот базис, который будет более универсальным и на реализацию которого потребуется меньшее кол-во логических элементов. В нашем случае это базис Буля (11 логических элементов).

Заключение

В данной курсовой работе были рассмотрены методы минимизации ФАЛ от 4х переменных: методы Квайна, Квайна-Маккласки, карт Карно, неопределенных коэффициентов, а также рассмотрено прямое алгебраическое преобразование. Для двух из них (метода неопределенных коэффициентов и метода Квайна) были разработаны программы. При этом особенно трудно было реализовать процедуры, отвечающие за логические операции. Причем просматривалась следующая закономерность: чем легче был метод для ручного исполнения, тем труднее было написать для него программу. Взять хотя бы метод карт Карно. С его помощью вручную очень легко получить МДНФ, составить таблицу и выбрав правильные прямоугольники. Но если взяться за реализацию этого метода программно, то сразу возникают трудности, особенно при написании процедуры выбора правильных прямоугольников. Это будет очень сложная логическая процедура, кажется, что все просто.

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

В задаче курсовой работы также входил синтез логической схемы. Полученная схема МДНФ была реализована в трех базисах: Буля, Пирса, Шеффера. Анализ и оценка аппаратурных затрат также приведена в данной записке.

Список литературы

1. Гаджиев А.А. Методические указания к выполнению курсовой работы по дисциплине “Дискретная математика” для студентов специальности 22.01 (ВМКСиС). Махачкала, 1998 г.

2. Гаджиев А.А. Методические указания к выполнению лабораторного практикума по дисциплине “Дискретная математика” (часть 2. Математическая логика). Махачкала, 1998 г.

Приложение

Программа для метода Квайна

Uses Crt;

Const

R = 4;

SR = 16;

Type

Diz = string[R];

Var

S :array[1..SR*2] of Diz;

Rez :array[1..SR*2] of Diz;

Flag :array[1..SR*2] of byte;

Y :array[1..SR] of byte;

IndexS : byte;

IndexRez : byte;

i, j, k : byte;

FData : Text;

FRez : Text;

FDSNF : file of Diz;

FSImp : file of Diz;

{Функцияформированиядизъюнкта}

Function MakeDiz(Number: byte): Diz;

Var

i : byte;

S : Diz;

C : char;

Begin

S:='';

for i:=0 to R-1 do

begin

C:=chr(((Number shr i) and $01) + 48);

Insert(C, S, 1);

end;

MakeDiz:=S;

End;

{Функциясклеивания}

Procedure Stuck(S1, S2: Diz; IndexS1, IndexS2 : byte);

Var

i, k, n: byte;

Begin

k:=0; {кол-во разных}

for i:=1 to R do

if S1[i] <> S2[i] then

begin

k:=k+1;

n:=i;

end;

case k of

0 : begin

Inc(IndexRez);

Rez[IndexRez]:=S1;

Flag[IndexS1]:=1;

Flag[IndexS2]:=1;

end;

1 : if (S1[n]<>'*') and (S2[n]<>'*') then

begin

S1[n]:='*';

Inc(IndexRez);

Rez[IndexRez]:=S1;

Flag[IndexS1]:=1;

Flag[IndexS2]:=1;

end;

end;

End;

{Функция проверки на удаление пустого дизъюнкта}

Function Del(S : Diz): Boolean;

Var

i, k : byte;

Begin

Del:=False;

k:=0;

for i:=1 to R do

if S[i]='*' then

k:=k+1;

if k=R then

Del:=True;

End;

Procedure Clear;

Var

i, j : byte;

Begin

IndexS:=0;

for i:=1 to SR*2 do

begin

Flag[i]:=0;

S[i]:='';

end;

for i:=1 to IndexRez-1 do

if Flag[i]=0 then

for j:=i+1 to IndexRez do

if Rez[i]=Rez[j] then

Flag[j]:=1;

for i:=1 to IndexRez do

if Flag[i]=0 then

begin

Inc(IndexS);

S[IndexS]:=Rez[i];

end;

End;

{Вывод на экран массива Rez}

Procedure PrintRezult(Step: Byte);

Var

i : byte;

Begin

WriteLn('{------------------------------------------------}');

WriteLn(FRez, '{-----------------------------------------}');

if Step=0 then

begin

Write('ИсходнаяДНФ.');

Write(FRez, 'Исходная ДНФ.');

end

else

begin

Write('Шагномер :', Step:2, '.');

Write(FRez, 'Шагномер :', Step:2, '.');

end;

WriteLn(' Количество дизъюнктов :', IndexS:2);

WriteLn(FRez, ' Количество дизъюнктов :', IndexS:2);

for i:=1 to IndexS do

begin

WriteLn(S[i]);

WriteLn(FRez, S[i]);

end;

ReadKey;

End;

{Основная программа}

Begin

ClrScr;

Assign(FDSNF, 'dsnf.dat');

Rewrite(FDSNF);

Assign(FSImp, 'simplimp.dat');

Rewrite(FSImp);

Assign(FRez, 'rezult.dat');

ReWrite(FRez);

{Считать массив Y из файла}

Assign(FData, 'func.dat');

Reset(FData);

for i:=1 to SR do

Read(FData, Y[i]);

Close(FData);

{Получить массив S}

for i:=1 to SR do

S[i]:=MakeDiz(i-1);

{Преоразовать S: оставив только те элементы, для которых Y=1. Результатав Rez}

IndexRez:=0;

for i:=1 to SR do

if Y[i]=1 then

begin

Inc(IndexRez);

Rez[IndexRez]:=S[i];

end;

for i:=1 to SR*2 do

S[i]:=Rez[i];

IndexS:=IndexRez;

for i:=1 to IndexS do

Write(FDSNF, S[i]);

PrintRezult(0);

{склеивание}

for i:=1 to R do

begin

IndexRez:=0;

{------------------------------------------------------------}

for j:=1 to SR*2 do {подготовкамассива Flag подсклеивание}

Flag[j]:=0;

{------------------------------------------------------------}

for j:=1 to SR*2 do {склеивание}

Rez[j]:='';

for j:=1 to IndexS-1 do

for k:=j+1 to IndexS do

Stuck(S[j], S[k], j, k);

{------------------------------------------------------------}

for j:=1 to IndexS do {копирование несклеившихся компонент}

if Flag[j]=0 then

begin

Inc(IndexRez);

Rez[IndexRez]:=S[j];

end;

{------------------------------------------------------------}

Clear; {удаление одинаковых дизъюнктов}

{------------------------------------------------------------}

PrintRezult(i); {вывод результата на экран}

end;

{Удалить все дизъюнкты вида '****'}

IndexRez:=0;

for i:=1 to IndexS do

if not Del(S[i]) then

begin

Inc(IndexRez);

Rez[IndexRez]:=S[i];

end;

for i:=1 to IndexS do

Write(FSImp, S[i]);

PrintRezult(R+1);

Close(FSImp);

Close(FDSNF);

Close(FRez);

End.

Результаты работы программы (файл rezult.dat).

{----------------------------------------------------------------}

Исходная ДНФ. Количество дизъюнктов : 9

0000

0010

0011

0101

0110

0111

1010

1011

1111

{----------------------------------------------------------------}

Шаг номер : 1. Количество дизъюнктов :11

00*0

001*

0*10

*010

0*11

*011

01*1

011*

*111

101*

1*11

{----------------------------------------------------------------}

Шаг номер : 2. Количество дизъюнктов : 5

0*1*

*01*

**11

00*0

01*1

{----------------------------------------------------------------}

Шаг номер : 3. Количество дизъюнктов : 5

0*1*

*01*

**11

00*0

01*1

{----------------------------------------------------------------}

Шаг номер : 4. Количество дизъюнктов : 5

0*1*

*01*

**11

00*0

01*1

{----------------------------------------------------------------}

Шаг номер : 5. Количество дизъюнктов : 5

0*1*

*01*

**11

00*0

01*1

Программа для метода Петрика.

Uses Crt;

Type

string4 = String[4];

string16 = String[16];

TImpArray = array[1..16] of string4;

Var

DSNF : TImpArray; {ДСНФ}

SimpleImp : TImpArray; {Простыеимпликанты}

IndexDSNF : Integer;

IndexSImp : Integer;

QM : array[1..16, 1..16] of integer; {матрицапокрытия}

S16Min : string16;

Procedure Input;

Var

FData : file of string4;

i : integer;

Begin

{вводматрицыДСНФ}

Assign(FData, 'dsnf.dat');

Reset(FData);

i:=0;

while not eof(FData) do

begin

Inc(i);

Read(FData, DSNF[i]);

end;

IndexDSNF:=i;

Close(FData);

{вводпростыхимпликант}

Assign(FData, 'simplimp.dat');

Reset(FData);

i:=0;

while not eof(FData) do

begin

Inc(i);

Read(FData, SimpleImp[i]);

end;

IndexSImp:=i;

Close(FData);

{конецввода}

End;

Function Metka(n, m: integer): boolean;

Var

i, S : integer;

Begin

Metka:=False;

S:=0;

for i:=1 to 4 do

if SimpleImp[n, i]='*' then

S:=S+1

else

if SimpleImp[n, i]=DSNF[m, i] then

S:=S+1;

if S=4 then

Metka:=True;

End;

Procedure FormMatrix;

Var

i, j : integer;

Begin

for i:=1 to IndexSImp do

for j:=1 to IndexDSNF do

if Metka(i, j) then

QM[i, j]:=1

else

QM[i, j]:=0;

End;

Procedure PrintMatrix;

Var

i, j: integer;

Begin

TextColor(LIGHTGREEN);

Write(' ');

for i:=1 to IndexDSNF do

Write(DSNF[i]:6);

WriteLn;

for i:=1 to IndexSImp do

begin

TextColor(LIGHTGREEN);

Write(SimpleImp[i]:6);

for j:=1 to IndexDSNF do

case QM[i, j] of

1 : begin TextColor(LIGHTRED); Write(' 1'); end;

0 : begin TextColor(RED); Write(' -'); end;

end;

WriteLn;

end;

End;

Function Bin(N :integer): string16;

Var

i : integer;

S : string16;

Begin

S:='0000000000000000';

i:=0;

while N>0 do

begin

Inc(i);

Insert(Chr((N mod 2)+48), S, i);

N:=N div 2;

end;

Bin:=S;

End;

Function Pokritie(var S: string16): boolean;

Var

V : array[1..16] of integer;

i, j, Sum: integer;

Begin

Pokritie:=False;

for i:=1 to 16 do

V[i]:=0;

for i:=1 to IndexSImp do

if S[i]='1' then

for j:=1 to IndexDSNF do

if QM[i, j]=1 then

V[j]:=1;

Sum:=0;

for i:=1 to IndexDSNF do

if V[i]=1 then

Sum:=Sum+1;

if Sum=IndexDSNF then

Pokritie:=True;

End;

Function Count(S: string16): integer;

Var

i, j, C: integer;

Begin

C:=0;

for i:=1 to IndexSImp do

if S[i]='1' then

for j:=1 to 4 do

if SimpleImp[i, j]<>'*' then

C:=C+1;

Count:=C;

End;

Procedure ActionsPetrik;

Var

i, j, Index : integer;

S16 : string16;

Begin

Index:=(1 shl IndexSImp)-1;

S16Min:='1111111111111111';

for i:=1 to Index do

begin

S16:=Bin(i);

if Pokritie(S16) then

if Count(S16)<Count(S16Min) then

S16Min:=S16;

end;

End;

Procedure PrintRezult;

Var

i : integer;

Begin

WriteLn;

WriteLn;

TextColor(LIGHTGREEN);

WriteLn('Минимальнаядизъюнктивнаянормальнаяформа.');

WriteLn;

TextColor(LIGHTRED);

for i:=1 to IndexSImp do

if S16Min[i]='1' then

WriteLn(SimpleImp[i]:8);

End;

Begin

ClrScr;

Input; {вводданных}

FormMatrix; {формирование матрицы покрытия для ее дальнейшей обработки}

PrintMatrix; {вывод матрицы}

ActionsPetrik; {формирование конъюнкции дизъюнкций

по методу Петрика и выбор минимальной из них}

PrintRezult; {печатьМДНФ}

ReadKey;

End.

Результаты работы программы.

0000 0010 0011 0101 0110 0111 1010 1011 1111

0*1* - 1 1 - 1 1 - - -

*01* - 1 1 - - - 1 1 -

**11 - - 1 - - 1 - 1 1

00*0 1 1 - - - - - - -

01*1 - - - 1 - 1 - - -

Минимальная дизъюнктивная нормальная форма.

0*1*

*01*

**11

00*0

01*1


Нет нужной работы в каталоге?

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

Цены ниже, чем в агентствах и у конкурентов

Вы работаете с экспертами напрямую. Поэтому стоимость работ приятно вас удивит

Бесплатные доработки и консультации

Исполнитель внесет нужные правки в работу по вашему требованию без доплат. Корректировки в максимально короткие сроки

Гарантируем возврат

Если работа вас не устроит – мы вернем 100% суммы заказа

Техподдержка 7 дней в неделю

Наши менеджеры всегда на связи и оперативно решат любую проблему

Строгий отбор экспертов

К работе допускаются только проверенные специалисты с высшим образованием. Проверяем диплом на оценки «хорошо» и «отлично»

1 000 +
Новых работ ежедневно
computer

Требуются доработки?
Они включены в стоимость работы

Работы выполняют эксперты в своём деле. Они ценят свою репутацию, поэтому результат выполненной работы гарантирован

avatar
Математика
История
Экономика
icon
159599
рейтинг
icon
3275
работ сдано
icon
1404
отзывов
avatar
Математика
Физика
История
icon
156450
рейтинг
icon
6068
работ сдано
icon
2737
отзывов
avatar
Химия
Экономика
Биология
icon
105734
рейтинг
icon
2110
работ сдано
icon
1318
отзывов
avatar
Высшая математика
Информатика
Геодезия
icon
62710
рейтинг
icon
1046
работ сдано
icon
598
отзывов
Отзывы студентов о нашей работе
63 457 оценок star star star star star
среднее 4.9 из 5
Тгу им. Г. Р. Державина
Реферат сделан досрочно, преподавателю понравилось, я тоже в восторге. Спасибо Татьяне за ...
star star star star star
РЭУ им.Плеханово
Альберт хороший исполнитель, сделал реферат очень быстро, вечером заказала, утром уже все ...
star star star star star
ФЭК
Маринаааа, спасибо вам огромное! Вы профессионал своего дела! Рекомендую всем ✌🏽😎
star star star star star

Последние размещённые задания

Ежедневно эксперты готовы работать над 1000 заданиями. Контролируйте процесс написания работы в режиме онлайн

Подогнать готовую курсовую под СТО

Курсовая, не знаю

Срок сдачи к 7 дек.

только что
только что

Выполнить задания

Другое, Товароведение

Срок сдачи к 6 дек.

1 минуту назад

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

Лабораторная, Архитектура средств вычислительной техники

Срок сдачи к 12 дек.

1 минуту назад

Организации профилактики травматизма в спортивных секциях в общеобразовательной школе

Курсовая, профилактики травматизма, медицина

Срок сдачи к 5 дек.

2 минуты назад

краткая характеристика сбербанка анализ тарифов РКО

Отчет по практике, дистанционное банковское обслуживание

Срок сдачи к 5 дек.

2 минуты назад

Исследование методов получения случайных чисел с заданным законом распределения

Лабораторная, Моделирование, математика

Срок сдачи к 10 дек.

4 минуты назад

Проектирование заготовок, получаемых литьем в песчано-глинистые формы

Лабораторная, основы технологии машиностроения

Срок сдачи к 14 дек.

4 минуты назад

2504

Презентация, ММУ одна

Срок сдачи к 7 дек.

6 минут назад

выполнить 3 задачи

Контрольная, Сопротивление материалов

Срок сдачи к 11 дек.

6 минут назад

Вам необходимо выбрать модель медиастратегии

Другое, Медиапланирование, реклама, маркетинг

Срок сдачи к 7 дек.

7 минут назад

Ответить на задания

Решение задач, Цифровизация процессов управления, информатика, программирование

Срок сдачи к 20 дек.

7 минут назад
8 минут назад

Все на фото

Курсовая, Землеустройство

Срок сдачи к 12 дек.

9 минут назад

Разработка веб-информационной системы для автоматизации складских операций компании Hoff

Диплом, Логистические системы, логистика, информатика, программирование, теория автоматического управления

Срок сдачи к 1 мар.

10 минут назад
11 минут назад

перевод текста, выполнение упражнений

Перевод с ин. языка, Немецкий язык

Срок сдачи к 7 дек.

11 минут назад
planes planes
Закажи индивидуальную работу за 1 минуту!

Размещенные на сайт контрольные, курсовые и иные категории работ (далее — Работы) и их содержимое предназначены исключительно для ознакомления, без целей коммерческого использования. Все права в отношении Работ и их содержимого принадлежат их законным правообладателям. Любое их использование возможно лишь с согласия законных правообладателей. Администрация сайта не несет ответственности за возможный вред и/или убытки, возникшие в связи с использованием Работ и их содержимого.

«Всё сдал!» — безопасный онлайн-сервис с проверенными экспертами

Используя «Свежую базу РГСР», вы принимаете пользовательское соглашение
и политику обработки персональных данных
Сайт работает по московскому времени:

Вход
Регистрация или
Не нашли, что искали?

Заполните форму и узнайте цену на индивидуальную работу!

Файлы (при наличии)

    это быстро и бесплатно