Вы находитесь на странице: 1из 6

Министерство Образования и Науки Республики Казахстан

Карагандинский Технический Университет

ЛАБОРАТОРНАЯ РАБОТА 3
Предмет: Дискретная математика
Тема: Булевы функции. Дизъюнктивные нормальные формы.

Подготовил:
Студент группы СИБ-19-4
Горбунов Вадим

Проверил: д.т.н., профессор


Яворский В.В.

В+(87) Вл. Яв.

Караганда 2020
Тема: Булевы функции. Дизъюнктивные нормальные формы.
Исходные данные:
Взять карту Вейча для четырех аргументов и записать туда свою фамилию,
имя и отчество. Буквы фамилии, имени и отчества заменить единицами
(включая «М») и получить представление некоторой функции в Карте Вейча.

Задание:
1. Записать СДНФ полученной функции.
2. Минимизировать запись функции, выделяя импликанты Карты Вейча.
3. Написать программу, реализующую полученную функцию, вывести на
печать минтермы функции.
4. Функцию представить в таблице истинности.
5. Проверить совпадение номеров минтермов в Карте Вейча и в таблице
истинности.

Решение:
Создание Карты Вейча:

B
_______________
||
Г О Р Б
|
A| 12 14 10 8
| |
| У Н О В |
| |
| 13 15 11 9 | D
В А Д И |
|
|
5 7 3 1
М А Л Е

4 6 2 0
______________________________________

С
B
_______________
||
1 0 0 1
|
A| 12 14 10 8
| |
| 0 0 0 1 |
| |
| 13 15 11 9 | D
1 1 1 1 |
|
|
5 7 3 1
1 1 1 1

4 6 2 0
______________________________________

1. СДНФ функции:
f = ABCD + A BCD+ A BC D+ A B C D+ A BCD+ AB CD + ABC D+ A B CD+ A BC D+ ABC D+ ABCD

Записываем минтермы функции:


f =m0 +m1+ m 2+ m3 +m4 + m5 +m6 +m7 +m8 +m9 +m12

Тогда f (0,1,2,3,4,5,6,7,8,9,12)

2. Минимизированная запись
f min =¿ AB CD + A BC + A B+ AB D+ ABD
3. Программная реализация
Код программы на Python:
minterms_count = 16 # количество минтермов
minterms = [] # список минтермов

for i in range(minterms_count):
binaryNumberStr = bin(i).replace('0b', '') # преобразование двоичного числа
binaryNumberStr = '0' * (4 - len(binaryNumberStr)) + binaryNumberStr #
преобразование двоичного числа в 4-битное двоичное число
a, b, c, d = int(binaryNumberStr[0]), int(binaryNumberStr[1]),
int(binaryNumberStr[2]), int(binaryNumberStr[3]) # перевод строк в числа
f_min = a*b*(not c)*(not d) + a*(not b)*(not c) + (not a)*b + (not a)*(not b)*d + (not
a)*(not b)*(not d) # подставление данных в минимизированную функцию
minterms.append(f_min) # добавление минтерма в список

for i, minterm in enumerate(minterms):


print(f'Минтерм №{i}\t = {minterm}') # вывод в консоль

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


Минтерм №0 =1
Минтерм №1 =1
Минтерм №2 =1
Минтерм №3 =1
Минтерм №4 =1
Минтерм №5 =1
Минтерм №6 =1
Минтерм №7 =1
Минтерм №8 =1
Минтерм №9 =1
Минтерм №10 =0
Минтерм №11 =0
Минтерм №12 =1
Минтерм №13 =0
Минтерм №14 =0
Минтерм №15 =0
0,1,2,3,4,5,6,7,8,9,12

Рисунок 1. Код программы в редакторе кода.

Рисунок 2. Результат работы программы в терминале.


4. Таблица истинности

№ A B C D ABCD A BC AB AB D ABD f1
м.
0 0 0 0 0 0 0 0 0 1 1
1 0 0 0 1 0 0 0 1 0 1
2 0 0 1 0 0 0 0 0 1 1
3 0 0 1 1 0 0 0 1 0 1
4 0 1 0 0 0 0 1 0 0 1
5 0 1 0 1 0 0 1 0 0 1
6 0 1 1 0 0 0 1 0 0 1
7 0 1 1 1 0 0 1 0 0 1
8 1 0 0 0 0 1 0 0 0 1
9 1 0 0 1 0 1 0 0 0 1
10 1 0 1 0 0 0 0 0 0 0
11 1 0 1 1 0 0 0 0 0 0
12 1 1 0 0 1 0 0 0 0 1
13 1 1 0 1 0 0 0 0 0 0
14 1 1 1 0 0 0 0 0 0 0
15 1 1 1 1 0 0 0 0 0 0

5. Проверка минтермов на совпадение


Минтермы Карты Вейча: f (0,1,2,3,4,5,6,7,8,9,12)
Минтермы таблицы истинности: f 1 (0,1,2,3,4,5,6,7,8,9,12)
Минтермы Карты Вейча f и минтермы таблицы истинности f 1
совпадают, следовательно лабораторная работа выполнена верно.

Вам также может понравиться