В большинстве языков высокого уровня имеются логические операции NOT, AND, OR, XOR, реализующие операции логического отрицания, логического умножения, логического сложения и сложение по модулю два.
В языке Паскаль логические операции применяются к величинам типа boolean, которые могут принимать только два значения: true- истина и false- ложь (false<true). Результат операции также будет иметь тип Boolean.
В языке Бейсик переменных логического типа нет, поэтому программирование логических операций имеет свои особенности: результат логической операции записывается в двух байтах («слове») памяти, причем логическому нулю соответствует слово &В0000000000000000, т.е. десятичный ноль, а логической единице соответствует слово &В1111111111111111, т.е. целое десятичное число -1.
Таким образом, имеем:
Значение истинности | Запись значения | |
Паскаль | Бейсик | |
Ложь | false | |
Истина | true | -1 |
Примечание: для того, чтобы на языке Бейсик получить таблицу истинности в привычном виде (0- ложь, 1- истина), при выводе значений выражений в операторе PRINT следует использовать знак «минус».
|
|
Программа построения таблиц истинности логических операций А&В, А v В, выглядит следующим образом:
Паскаль | Бейсик |
program log_op; var A, B: boolean; begin for A:= false to true do for B:= false to true do writeln(A:7, B:7, (A and B):7, (A or B):7, (not A):7); readln end. | 10 for A=0 to -1 step -1 20 for B=0 to -1 step -1 30 print -A, -B, -(A and B), -(A or B, -(not A)) 40 next B 50 next A 60 end |
Встречаются случаи, когда на конкретной ЭВМ среди машинных операций нет логических. Можно «научить» ЭВМ выполнять логические операции, моделируя их средствами арифметики.
Приведем формулы замены логических операций арифметическими (см. таб.3.1):
Таблица 3.1. Арифметические модели для некоторых логических операций
Операнды | Логическая операция | Арифметическая модель |
Операции отрицания (инверсия) | ||
А | 1 - А | |
Продолжение таблицы 3.1.
Операнды | Логическая операция | Арифметическая модель | |
Операция конъюнкции (логическое умножение) | |||
А | В | А&В | А*В |
Операция дизъюнкции (логическое сложение) | |||
А | В | А v В | А+В – А*В |
Операция импликации (логическое следование) | |||
А | В | А→В | 1 - А + А*В |
Операция равнозначности (эквивалентность) | |||
А | В | А ≡ В | 1 – (А - В)2 |
Продолжение таблицы 3.1.
Операнды | Логическая операция | Арифметическая модель | |
Операция неравнозначности (сложение по модулю 2) | |||
А | В | А В | (А - В)2 |
Функция Шеффера (отрицание конъюнкции) | |||
А | В | А / В | 1 – А*В |
Функция Пирса (отрицание дизъюнкции) | |||
А | В | А ↓ В | (1 – А)*(1 – В) |
|
|
Так, например, логическое выражение:
Х = (А→В) &(),
имеет арифметическую модель:
Y = (1 - A + A * B)*(1 - A * B).
Лабораторное задание:
Построить таблицы истинности заданных функций двумя способами:
1) с помощью Microsoft Excel;
2) составить программу либо на Паскале, либо на Бейсике, используя при необходимости замену логических операций арифметическими.
Логические функции выбрать из таблицы в соответствии со своим вариантом. Номер варианта согласуется с преподавателем.
№ варианта | Логические функции | |
→(В→С) | ||
( →В) →( →С) | ||
&В→С | ||
&(В→С) | ||
( →С) →( →В) | ||
( →В) v (А→С) | ||
(А→В) & ( →С) | ||
А→(В→ &В) | ||
Контрольные вопросы:
1. Для чего предназначена таблица истинности?
2. Каким образом можно построить таблицу истинности сложного выражения в табличном процессоре MicrosoftExcel?
3. К какому типу величин в Паскале могут быть применены логические операции?
4. Имеются ли в Бейсике переменные логического типа?
5. Какой арифметической операцией можно заменить инверсию, конъюнкцию; дизъюнкцию?