- •Оглавление
- •1. Информация, ее представление и измерение
- •2. Системы счисления и действия в них
- •3. Пространство сообщений. Коды обнаружения и исправления ошибок
- •4. Кодирование и шифрование информации
- •4.1. Криптография и криптоанализ
- •4.2. Традиционные симметричные криптосистемы
- •4.2. Шифрование методом замены
- •4.3. Шифрование методами перестановки
- •4.4. Шифрование методом гаммирования
- •4.3.Элементы криптоанализа
- •5. Функции алгебры логики. Программная реализация логических функций
- •5.1. Основные функции алгебры логики
- •Коммутативность
- •Ассоциативность
- •Дистрибутивность
- •5.2. Булева алгебра. Функциональная полнота
- •Свойства алгебры Жегалкина
- •1. Коммутативность
- •2. Дистрибутивность
- •3. Идемпотентность
- •5.3. Минимизация функций алгебры логики
- •5.4. Программная реализация логических функций и автоматов
- •6. Логические элементы эвм
- •8. Данные, типы данных, структуры и обработка
- •9. Методы разработки и анализа алгоритмов
- •10. Теория конечных автоматов
- •10.1. Определение конечного автомата
- •10.2. Способы представления конечных автоматов
- •11. Архитектура эвм
- •12. Программное и техническое обеспечение эвм
- •13. Информационные структуры
- •13.1. Последовательное и связанное распределение данных
- •13.2. Стеки и очереди
- •13.3. Деревья
- •13.4. Представление деревьев
- •13.5. Прохождение деревьев, леса
- •14. Формальные языки и грамматики
- •14.1. Введение в теорию формальных языков и грамматик
- •14.2. Выводы цепочек формальных грамматик. Деревья ксг
- •14.3. Основные понятия теории формальных языков и грамматик
- •Литература
5.4. Программная реализация логических функций и автоматов
Представление автомата схемой, состоящей из логических элементов наиболее исследованный вид структурной реализации автомата. Другой ее вид - реализация программой. Программа вычисляет (реализует) логические функции f(x1, ..., xn) = y, если для любого двоичного набора 1,..., n ) при начальном состоянии элементов памяти x1 = 1 , x2 = 2 ,..., xn = n программа через конечное число шагов останавливается и в ячейке y лежит величина f(1, 2, ..., n ). Если под сложностью схемы, реализующей автомат, обычно понимается число элементов схемы, то под сложностью программ можно понимать:
-
число команд в тексте программы;
-
объем промежуточной памяти;
-
время вычисления программы, которое характеризуется двумя величинами:
-
Средним временем
-
Максимальным временем ,
где сумма и максимум берутся по всем 2 наборам, а p - время работы программы на одном наборе .
Рассмотрим 2 типа программ: операторные и бинарные. Операторная программа не содержит условных переходов, порядок ее команд в точности соответствует нумерации элементов в схеме, а система команд соответствует базису схемы. Элементы схемы нумеруются числами 1,..., n таким образом, чтобы на любом пути от входа к выходу номера элементов возрастали. При этом номер 1 получит один из входных элементов, а номер n - выходной элемент.
Пусть элемент схемы ei реализует функцию i и к его входам присоединены выходы элементов ej1 , e j2 , ..., e jm ( некоторые из них, возможно, являются входами схемы ), тогда выход такого элемента можно записать : ai = i ( ej1 , e j2, ..., e jm ) при i n, а выход схемы может быть записан: y = i( ej1, e j2, ..., e jm ) при i = n. Такая программа будет реализовывать работу заданной схемы. Проблема синтеза операторных программ сводится к проблеме синтеза схем, то есть к вопросам функциональной полноты и минимизации схем. Поскольку операторная программа не содержит условных переходов, то время ее выполнения на любом наборе одно и то же, отсюда t max = t ср.
Бинарные программы это программы, состоящие из команд типа y = ; = {0, 1} и условных переходов.
Замечание. Бинарные программы обладают двумя достоинствами по сравнению с операторными:
-
Отсутствием промежуточной памяти в процессе работы программы. Это позволяет реализовать бинарную программу на постоянных элементах памяти.
-
Более высоким быстродействием.
Пример. Составить для функции f = ( x1 v x3 ) & (x5 & x4 v x2) бинарную и операторную программы.
Решение. Воспользуемся языком С++, будем иметь код:
void main()
{
bool f=0, x1,x2,x3,x4,x5 ; // описание типа переменных
cout<<” Enter x1,x2,x3,x4\n”; // вывод на экран текста
cin>> x1>>x2>>x3>>x4>>x5; // ввод переменных
switch (x1) // оператор выбора
case 0: switch(x3)
case 0: f:=1;
case 1: f:=0;
case 1: f:=1;
switch ( f)
case 1: switch ( x5)
case 0: switch (x2)
case 0: f:= 0;
case 1: f:= 1;
case 1: switch (x4)
case 0: f:= 1;
case 1: switch (x2)
case 0: f:= 0;
case 1: f:= 1;
case 0: f=0;
default: f=0;
cout>> f ;
}
Операторная программа пишется в базисе {&,}. Для этого перепишем заданную функцию, используя формулы де Моргана.
f = (x1 & x3 ) & ( ( x5 & x4 ) & x2 )
void main()
{
bool f, x1,x2,x3,x4,x5 ; // описание типа переменных
cout<<” Enter x1,x2,x3,x4\n”; // вывод на экран текста
cin>> x1>>x2>>x3>>x4>>x5; // ввод переменных
a= 1-x1; {}
b= a x3; {}
b= 1 - b; {}
a= 1 - x4; {}
c= a x5 ; {}
c= 1 - c ; {}
a= 1 - x2 ; {}
c= c a; {}
c= 1 - c; {}
f= b c;
cout<<f;
}