
- •1. Из десятичной системы счисления - в двоичную и шестнадцатеричную:
- •Из двоичной и шестнадцатеричной систем счисления - в десятичную. В этом случае рассчитывается полное значение числа по формуле.
- •3. Из двоичной системы счисления в шестнадцатеричную:
- •4. Из шестнадцатеричной системы счисления в двоичную:
- •1. Из десятичной системы счисления - в двоичную и шестнадцатеричную:
- •3. Из двоичной системы счисления в шестнадцатеричную:
- •4. Из шестнадцатеричной системы счисления в двоичную:
- •Логические переменные и логические операции
- •4.2. Основные законы алгебры логики и правила преобразования логических выражений
- •4.3. Логические функции и таблицы истинности
- •4.4. Логические элементы и синтез логических схем
4.4. Логические элементы и синтез логических схем
Сложные цифровые логические устройства, входящие в состав компьютера, состоят из ряда элементарных логических элементов, построенных на базе средств электронной техники. При производстве этих электронных логических элементов используют различные технологии и схемотехнические решения, такие как: ДТЛ (диодно-транзисторная логика), ТТЛ (транзисторно-транзисторная логика), ЭСЛ (эмиттерно-связанная логика), технологии, основанные на использовании полевых транзисторов, и т. д. Логические элементы позволяют реализовать любую логическую функцию. Входные и выходные сигналы логических элементов, соответствующие двум логическим состояниям 1 и 0, могут иметь один из двух установленных уровней электрического напряжения, который зависит от схемотехнического решения логического элемента. Например, для логических элементов, основанных на технологии ТТЛ, высокий уровень электрического напряжения (2,4 ÷ 5 В) соответствует значению логической единицы (истина), а низкий уровень (0 ÷ 0,4 В) – логическому нулю (ложь).
Три приведенных ниже логических элемента составляют функционально полную систему для проектирования цифровых логических устройств, в том числе и соответствующих логических блоков и устройств компьютера, поскольку реализуют функционально полный набор логических функций, состоящий из логических функций: И (конъюнкции), ИЛИ (дизъюнкции), НЕ (отрицания).
1. Логический элемент НЕ, который называется также инвертором, выполняет логическую операцию отрицания (инверсии).
2. Логический элемент И, называемый также конъюнктором, выполняет операцию логического умножения (конъюнкции), теоретически может иметь бесконечное число входов, на практике ограничиваются числом входов от двух до восьми.
3. Логический элемент ИЛИ, называемый также дизъюнктором, выполняет операцию логического сложения (дизъюнкции), теоретически может иметь бесконечное число входов, на практике ограничиваются числом входов от двух до восьми.
При проектировании цифровых логических устройств часто возникает задача по заданной таблице истинности записать выражение для логической функции и реализовать ее в виде логической схемы, состоящей из функционально полного набора логических элементов. Данную задачу называют также задачей синтеза логических схем или логических устройств.
Синтез логических схем на основе функционально полного набора логических элементов состоит из представления логических функций, описывающих данные логические схемы в нормальных формах. Нормальной формой представления считается форма, полученная посредством суперпозиций вспомогательных логических функций – минтермов и макстернов.
Минтермом называют логическую функцию, которая принимает значение логической единицы только при одном значении логических переменных и значение логического нуля при других значениях логических переменных. Например, минтермами являются логические функции F2, F3, F5 и F9 (см. рис. 4.3).
Макстерном называют логическую функцию, которая принимает значение логического нуля только при одном значении логических переменных и значение логической единицы при других значениях логических переменных. Например, макстернами являются логические функции F8, F12, F14 и F15 (см. рис. 4.3).
Из минтермов и макстернов методом суперпозиции можно составить логические функции, которые называются соответственно логической функцией, представленной посредством совершенных дизъюнктивных нормальных форм (СДНФ), и логической функцией, представленной посредством совершенных конъюнктивных нормальных форм (СКНФ). Полученные таким образом функции СДНФ и СКНФ будут представлять искомую логическую функцию по заданной таблице истинности. После получения функций СДНФ и СКНФ их необходимо преобразовать (минимизировать). Преобразование данных функций с целью их минимизации осуществляется с помощью законов алгебры логики и специальных разработанных методов: метод Квайна, карты Карно, диаграммы Вейча и т. д.
Рассмотрим задачу синтеза на примере модифицированной таблицы истинности, приведенной на рис. 4.6. Для данной таблицы истинности необходимо записать выражение для выходной функции F, провести ее преобразование (минимизацию) на основе законов алгебры логики и, используя основные логические элементы – НЕ, И и ИЛИ, разработать логическую схему реализации выходной функции F.
Рис. 4.6. Таблица истинности логических переменных A, В и С
Значения логических переменных А, В и С и соответствующие значения функции F приведены в таблице истинности (см. рис. 4.6), где в столбце № – указан номер комбинации логических переменных A, В и С.
Для решения указанной задачи представим логическую функцию F в виде СДНФ, а затем и в СКНФ. Найдем вспомогательные функции минтермы и макстермы. В заданной таблице истинности выходная функция F принимает логическое значение, равное логической единице, при комбинациях логических переменных A, В и С, указанных под номерами 3, 6, 8, а значение, равное логическому нулю – при комбинациях, указанных под номерами 1, 2, 4, 5,7.
Минтермы запишем в следующем виде:
Минтермы представляют собой логические произведения (конъюнкции) логических переменных А, В, и С при значениях логической функции F, равных логической единице (комбинации 3, 6, 8). Сомножители (логические переменные A, В и С) входят в минтерм в прямом виде (без отрицания), если их значения равны логической единице, и в инверсном (с отрицанием), если их значения равны логическому нулю. Логическая функция F в СДНФ будет равна логической сумме минтермов:
После минимизации логической функции Fc использованием законов алгебры логики получим ее искомое выражение:
Макстермы запишем в следующем виде:
Макстермы представляют собой логические суммы (дизъюнкции) логических переменных А, В, и С при значениях логической функции F, равных логическому нулю (комбинации 1, 2, 4, 5, 7). Слагаемые (логические переменные A, В, и С) входят в макстерм в прямом виде (без отрицания), если их значения равны логическому нулю, и в инверсном (с отрицанием), если их значения равны логической единице. Логическая функция F в СКНФ будет равна логическому произведению макстермов:
Поскольку полученное выражение для F в виде СКНФ является более громоздким по сравнению с представлением F в виде СДНФ, то в качестве окончательного выражения для F примем ее выражение в виде СДНФ, т. е.
Аналогичным образом можно получить выражение для любой логической функции, которая представлена с помощью заданной таблицы истинности с Означениями логических переменных.
Используем полученное выражение логической функции F для разработки (построения) логической схемы на основе функционально полного набора логических элементов НЕ, И и ИЛИ. При построении логической схемы необходимо учитывать установленные в алгебре логики правила (приоритеты) для выполнения логических операций, которые в данном случае реализуются с помощью логических элементов НЕ, И и ИЛИ. Порядок производимых логических операций будет следующий: операция инверсии (отрицания), операция логического умножения (конъюнкции) и затем операция логического сложения (дизъюнкции). Реализация функции F в виде логической схемы, приведена на рис. 4.7.
Рис. 4.7. Реализация функции F в виде логической схемы
Для графического отображения логических схем существуют различные компьютерные программы, называемые графическими редакторами. Данные программы могут быть включены в другие компьютерные программы, например в программах Microsoft Word и Microsoft Excel такие редакторы реализованы с помощью панелей инструментов «Рисование», или быть самостоятельными программами, например Paint, Microsoft Visio и т. д. Воспользуемся встроенным графическим редактором (панель «Рисование») программы MS Excel для графического отображения логической схемы функции F. Данная логическая схема показана на рис. 4.8.
Рис. 4.8. Графическое отображение логической функции F с помощью программы MS Excel
На основе функционально полного набора логических элементов построены различные электронные устройства, входящие в состав компьютера. К таким устройствам относятся сумматоры (выполняющие операции сложения двоичных чисел), триггеры (устройства, имеющие два устойчивых состояния: логического нуля и логической единицы и используемые в качестве двоичных элементов памяти), регистры памяти (состоящие из набора триггеров), двоичные счетчики, селекторы (переключатели сигналов), шифраторы, дешифраторы и т. д.
Рассмотренные выше таблицы истинности логических элементов показывают установившиеся значения логических переменных. Однако когда логические переменные представлены в виде электрических сигналов, то необходимо некоторое время для того, чтобы значение логической функции достигло уровня установившегося состояния из-за внутренних задержек по времени в электронных логических элементах. В среднем задержка электрического сигнала такого элемента составляет 10-9 с. В компьютере двоичные сигналы проходят через множество электронных схем, и задержка по времени может стать значительной. В этом случае выделяется отрезок времени (такт) на каждый шаг логической операции. Если операция заканчивается раньше, чем заканчивается тактовое время, то устройство, входящее в состав компьютера, ожидает ее окончания. В результате скорость выполнения операций несколько снижается, но достигается высокая надежность, так как обеспечивается синхронизация между многими параллельно выполняющимися операциями в компьютере. Синхронизация устройств в компьютере обеспечивается с помощью специального генератора – генератора тактовой частоты, который вырабатывает электрические импульсы стабильной частоты.
ЛЕКЦИЯ 7 «ОПЕРАЦИОННАЯ СИСТЕМА. ОСНОВЫ ПОСТРОЕНИЯ И РАБОТЫ»
Понятие алгоритма
В сегодняшнем социуме слово «алгоритм» настолько широко распространено, что большинству интуитивно понятно. Под ним мы понимаем какую-либо последовательность шагов для достижения той или иной цели. Однако для теоретической науки понятие «алгоритма» достаточно сложное.
Считается, что однозначного определения алгоритма нет, хотя в основном различные источники дают очень близкие определения.
Итак, в широко распространенных определениях алгоритма (в рамках школьного курса информатики) можно выделить следующие составляющие:
Алгоритм – это конечная последовательность указаний …
… на языке понятном исполнителю, …
… задающая процесс решения задач определенного типа …
… и ведущая к получению результата, однозначно определяемого допустимыми исходными данными.
В последнем пункте определения говорится о том, что результат выполнения алгоритма напрямую зависит от исходных данных. Т.е. один и тот же алгоритм при разных исходных данных даст разные результаты. С другой стороны, если одному и тому же алгоритму передать несколько раз одни и те же данные, он должен столько же раз выдать один и тот же результат.
Слово «алгоритм» происходит от имени ученого IX века Муххамеда бен Аль-Хорезми («аль-хорезми» -> «алгоритм»), который описал правила выполнения арифметических действий в десятичной системе счисления. Словом «алгоритм» потом и стали обозначать эти правила вычислений. Однако с течением времени понятие алгоритма видоизменялось и в XX веке под ним стали понимать какую-либо последовательность действий, приводящую к решению поставленной задачи.
Сначала определение понятия алгоритма было проблемой математики, однако с течением времени теория алгоритмов стала развиваться за счет влияния открытий не только в математике, но и в информатике. В настоящее время алгоритм является одним из главных понятий информатики.
Свойства алгоритма
Дискретность (в данном случае, разделенность на части) и упорядоченность. Алгоритм должен состоять из отдельных действий, которые выполняются последовательно друг за другом.
Детерминированность (однозначная определенность). Многократное применение одного алгоритма к одному и тому же набору исходных данных всегда дает один и тот же результат.
Формальность. Алгоритм не должен допускать неоднозначности толкования действий для исполнителя.
Результативность и конечность. Работа алгоритма должна завершаться за определенное число шагов, при этом задача должна быть решена.
Массовость. Определенный алгоритм должен быть применим ко всем однотипным задачам.
Исполнитель и разработчик алгоритма
Разрабатывать, придумывать алгоритмы могут только разумные существа (например, человек). А вот формально (не думая и не оценивая) исполнять, могут какие-либо машины (например, компьютеры, бытовые приборы). В чем польза такого разделения труда? Дело в том, что человек освобождается от рутинной деятельности, которая часто может занимать много времени, и поручает ее машинам.
Однако машины не люди: приборы понимают лишь ограниченное число команд и могут обрабатывать данные (объекты) далеко не всех типов. Отсюда следует, что разработчик алгоритма в конечном итоге должен описать алгоритм в допустимых командах определенного исполнителя (той машины, которой будет поручено выполнение алгоритма). Совокупность команд, которые данный исполнитель может выполнять, называется системой команд исполнителя. Объекты (данные), над которыми исполнитель может выполнять действия, формируют среду исполнителя.
Язык программирования - средство записи алгоритмов для компьютеров
Достаточно универсальным исполнителем является компьютер. С его помощью можно выполнять разнообразные по видам алгоритмы: делать математические вычисления, обрабатывать текстовые данные, изменять графику и др. В каком-то смысле компьютер может делать многое, что и человек, а некоторые вещи намного быстрее. Однако человек и компьютер «разговаривают» на совершенно разных языках: один – на естественном (русском, английском и др.), а другой – на формальном (машинном) языке.
Разработав алгоритм, человек должен как-то «объяснить» его компьютеру. Для этих целей служат языки программирования, а результатом записи алгоритма на них является программа.
В настоящее время язык программирования – это скорее некий посредник между человеком и вычислительной машиной. Программа, написанная на языке программирования, в последствии переводится на машинный язык транслятором.
Итог
Изучение алгоритмов имеет большую практическую значимость. Это связано с тем, что создание алгоритма предполагает подробное описание каждого шага решения задачи, и в конечном итоге шаг алгоритма может быть достаточно прост для выполнения его компьютером. А значит, задачи, для которых можно выработать алгоритм их решения, могут быть автоматизированы, т.е. переложены «на плечи» машин.
Однако следует всегда помнить, что не все задачи имеют алгоритмическое решение.
При этом для тех задач, которые все-таки имеют алгоритмическое решение, могут быть разработаны различные алгоритмы. Но наиболее эффективным, скорее всего, будет только один.
Язык блок-схем
Алгоритм можно описать разными способами: словами, на языке программирования, а также с помощью блок-схем.
На языке блок-схем каждый шаг алгоритма описывается с помощью соответствующей фигуры, а последовательность выполнения шагов определяется линиями-связями. Блок схемы читаются сверху вниз и слева направо.
Блок-схемы полезны тем, что обеспечивают легкую «читаемость» алгоритма. Однако это не всегда так: стоит попытаться нарисовать блок-схему для более-менее сложного алгоритма, как она разрастается до невероятных размеров и теряет все свое наглядное преимущество. Поэтому блок-схемы хороши в структурном программировании для описания коротких алгоритмов.
Язык блок-схем прост (хотя существуют его расширенные варианты):
Прямоугольник – выполнение действия (например, c = a + b)
Ромб – проверка условия (например, a > b). Если условие выполняется, то алгоритм идет по линии «да», если не выполняется – то по линии «нет».
Скругленный прямоугольник – начало и конец алгоритма
Скошенный прямоугольник – ввод-вывод данных (например, получение значения переменной, вывод результата на экран монитора). Это не полное описание языка блок-схем.
Алгоритмические структуры (типы алгоритмов)
В рамках структурного программирования задачи, имеющие алгоритмическое решение, могут быть описаны с использованием следующих алгоритмических структур:
Следование. Предполагает последовательное выполнение команд сверху вниз. Если алгоритм состоит только из структур следования, то он является линейным.
Ветвление. Выполнение программы идет по одной из двух, нескольких или множества ветвей. Выбор ветви зависит от условия на входе ветвления и поступивших сюда данных.
Цикл. Предполагает возможность многократного повторения определенных действий. Количество повторений зависит от условия цикла.
Функция (подпрограмма). Команды, отделенные от основной программы, выполняются лишь в случае их вызова из основной программы (из любого ее места). Одна и та же функция может вызываться из основной программы сколь угодно раз.
Описание различных алгоритмических структур на языке блок-схем
|
Ветвление if Это самый простой тип ветвления. Если результат вычисления выражения-условия возвращает true (правда), то выполнение алгоритма идет по ветке «Да», в которую включены дополнительные выражения-действия. Если условие возвращает false (ложь), то выполнение алгоритма идет по ветке «нет», т.е продолжает выполняться основная ветка программы. |
|
Ветвление if-else Если выражение-условие возвращает true (правда), то выполнение алгоритма идет по ветке «Да», если условие не выполняется (false), то выполнение идет по ветке «Нет». При любом результате выражения-условия нельзя вернуться в основную ветку программы, минуя дополнительные действия. |
|
Ветвление if-elif-else Количество условий может быть различно. Если выполняется первое, то после выполнения действий, программа переходит к основной ветке, не проверяя дальнейшие условия. Если первое условие возвращает ложь, то проверяется второе условие. Если второе условие возвращает правду, то выполняются действия, включенные в вторую ветку конструкции. Последнее условие проверяется лишь в том случае, если ни одно до него не дало в результате true. Данную алгоритмическую конструкцию (if – elif – else) не следует путать с алгоритмической конструкцией «Выбор». |
|
Цикл while Пока условие выполняется (результат логического выражения дает true), будут выполняться действия тела цикла. После очередного выполнения вложенных действий условие снова проверяется. Для того чтобы выполнение алгоритма не зациклилось, в теле цикла (помимо прочих действий) должно быть выражение, в результате выполнения которого будет изменяться переменная, используемая в условии. Тело цикла может ни разу не выполнится, если условие с самого начала давало false. |
|
Цикл do В этом цикле первый раз условие проверяется лишь после выполнения действий тела цикла. Если условие возвращает true, то выражения-действия повторяются снова. Каким бы ни было условие, тело данного цикла хотя бы раз, но выполнится. |
|
Цикл for Данный цикл также называют циклом «Для» (for). В его заголовке указывается три параметра: начальное значение переменной (от), конечно значение (до) и ее изменение с помощью арифметической операции на каждом «обороте» цикла (шаг). |
Алгоритм Евклида (нахождение наибольшего общего делителя)
Алгоритм Евклида – это алгоритм нахождения наибольшего общего делителя (НОД) пары целых чисел. Наибольший общий делитель (НОД) – это число, которое делит без остатка два числа и делится само без остатка на любой другой делитель данных двух чисел. Проще говоря, это самое большое число, на которое можно без остатка разделить два числа, для которых ищется НОД.
Описание алгоритма нахождения НОД делением
Большее число делим на меньшее.
Если делится без остатка, то меньшее число и есть НОД (следует выйти из цикла).
Если есть остаток, то большее число заменяем на остаток от деления.
Переходим к пункту 1.
Пример: Найти НОД для 30 и 18. 30/18 = 1 (остаток 12) 18/12 = 1 (остаток 6) 12/6 = 2 (остаток 0). Конец: НОД – это делитель. НОД (30, 18) = 6
Перебор делителей ("тестирование простоты")
Перебор делителей – это алгоритм, предназначенный для определения, какое число перед нами: простое или составное. Алгоритм заключается в последовательном делении заданного натурального числа на все целые числа, начиная с двойки и заканчивая значением меньшим или равным квадратному корню тестируемого числа. Если хотя бы один делитель делит тестируемое число без остатка, то оно является составным. Если у тестируемого числа нет ни одного делителя, делящего его без остатка, то такое число является простым.
Решето Эратосфена - алгоритм определения простых чисел
Решето Эратосфена – это алгоритм нахождения простых чисел до заданного числа n. В процессе выполнения данного алгоритма постепенно отсеиваются составные числа, кратные простым, начиная с 2.