
- •6. Алгоритмы и программы
- •6.1. Алгоритм и алгоритмический процесс
- •6.1.1. Основные свойства алгоритмов:
- •6.1.2. Способы записи алгоритма
- •6.1.3. Схемы алгоритмов и программ
- •6.2. Переменная и постоянная величина Выражения
- •6.3. Присваивание
- •6.4. Основные этапы решения задач на эвм
- •6. 5. Алгоритмизация. Базовые алгоритмические структуры
- •6.5.1. Реализация базовых структур в языке Pascal
- •6.5.2. Реализация базовых структур в языке qBasic
- •Операторы тела цикла
- •6.6. Ввод - вывод
- •6.6.1.Ввод-вывод данных на языке Pascal
- •Var X, y: integer; {Описание переменных X, y целочисленного типа}
- •6.6.2. Ввод-вывод данных на языке qBasic
- •6.7. Алгоритмы линейной и разветвляющейся структуры
- •Решение задачи 6.3. На языке Turbo Pascal:
- •6.8. Циклические алгоритмы
- •Input "Введите натуральное м : " , m
- •Print : print "о т в е т : Сумма этих чисел равна "; s
- •6.9. Итерационные циклы
- •6.10. Массивы
- •6.11. Вложенные циклы
- •6.12. Подпрограммы
- •6.12.1. Параметры подпрограмм
- •6.12.2. Подпрограммы в языке Pascal
- •Операторы функции, один из которых
- •6.12.3. Подпрограммы в языке Basic
- •6.13. Рекурсия
- •6.14. Логические операции с числами
- •6.15. Работа с символьной информацией
- •6.15.1. Работа с символьной информацией в языке Basic
- •6.15.2. Работа с символьной информацией в языке Pascal
6.14. Логические операции с числами
В главе 6.2. мы говорили об использовании логических операций and, or и not в логических выражениях. И имели в виду выражения, принимающие логические значения истина или ложь. Например, логическое выражение (x >= a) and (x <= b) принимает значение истина, если точка x принадлежит отрезку [a, b].
Язык Basic имеет полный набор логических операций:
NOT, AND, OR, XOR, EQV, IMP.
Операции перечислены по убыванию приоритета. Операции сравнения имеют более высокий приоритет, чем логические операции. Значения результатов логических операций представлены в таблице 6.2.
Табл.6.2. Значения результатов логических операций.
Левая часть А |
Правая часть В |
NOT A |
A AND B |
A OR B |
A XOR B |
A EQV B |
A IMP B |
Ложь |
Ложь |
Истина |
Ложь |
Ложь |
Ложь |
Истина |
Истина |
Ложь |
Истина |
Истина |
Ложь |
Истина |
Истина |
Ложь |
Истина |
Истина |
Ложь |
Ложь |
Ложь |
Истина |
Истина |
Ложь |
Ложь |
Истина |
Истина |
Ложь |
Истина |
Истина |
Ложь |
Истина |
Истина |
В языке Basic логические константы представляются числами: ложь –нулевое значение, истина – ненулевое. Поэтому логические операции можно применять, если в выражениях участвуют произвольные целые числа.
Допустимы такие выражения, как
10 AND 3
22 OR –5
5 XOR 11
Участвующие в вычислениях числа представляются в двоичной форме записи и операции применяются поразрядно, т.е. к каждому биту. Необходимо учесть, что целые отрицательные числа представляются в компьютере в дополнительном коде. Значения результатов логических операций над числами представлены в таблице 6.3.
Табл.6.3. Значения результатов логических операций над числами.
Разряд А |
Разряд В |
NOT A |
A AND B |
A OR B |
A XOR B |
A EQV B |
A IMP B |
0 |
0 |
1 |
0 |
0 |
0 |
1 |
1 |
0 |
1 |
1 |
0 |
1 |
1 |
0 |
1 |
1 |
0 |
0 |
0 |
1 |
1 |
0 |
0 |
1 |
1 |
0 |
1 |
1 |
0 |
1 |
1 |
Пример 1. Вычислить значение выражения 11 AND 3.
Решение. Переведем заданные числа в двоичную систему счисления и приведем к одной разрядной сетке, в нашем примере достаточно 4 разряда. Буква В означает, что значение является двоичной константой.
11 = 1011В 2 = 10В
Выполним поразрядно операцию AND:
1011
AND
0010
0010
Получили 11 AND 3. = 1011B AND 10B = 10B = 2
Пример 2. Вычислить значение 22 OR -5.
Решение. Переведем заданные числа в двоичную систему счисления. Отрицательное число –5 представим в дополнительном коде. Приведем числа к одной разрядной сетке, в нашем примере достаточно 6 разрядов.
22 = 010110В
-5 доп.код = 111011В
Чтобы получить дополнительный код числа -5 отбросим знак минус и вычтем из числа единицу, получим число 4. Переведем число 4 в двоичную систему счисления, 4 = 000100B. Заменим все единицы на нули, а нули на единицы, получим 111011В.
Выполним поразрядно операцию OR:
010110
OR
111011
111111
В результате получили число в дополнительном коде 111111В. Старший разряд числа знаковый, т.к. он равен единице, значит получили отрицательное число в дополнительном коде. Выполним перевод из дополнительного кода в прямой: заменим все нули на единицы, а единицы на нули , затем прибавим единицу, полученное число переведем в двоичную систему счисления и припишем знак минус.
111111В = 000000В + 1В = 1В = -1
Получили 22 OR –5 = 010110 OR 111011 = 111111В = -1.
Упражнения.
1. Какое значение будет выведено следующим оператором языка Basic:
PRINT (NOT (15 OR 51) EQV 85) IMP (15 AND 51)
Решение.
Переведем заданные числа в двоичную систему счисления:
15 = 00001111В
51 = 00110011В
85 = 01010101В
Выполним операции в соответствии с приоритетами операций и скобками:
1) 15 OR 51 = 00001111В OR 00110011В = 00111111B
00001111
OR
00110011
00111111
2) NOT (15 OR 51) = NOT (00111111B) = 11000000B
3) NOT (15 OR 51) EQV 85 = 11000000B EQV 01010101В = 01101010B
11000000
EQV
01010101
01101010
4) 15 AND 51 = 00001111В AND 00110011В = 00000011B
00001111
AND
00110011
00000011
5) (NOT (15 OR 51) EQV 85) IMP (15 AND 51) = 01101010B IMP 00000011B =10010111B
01101010
IMP
00000011
10010111
Получили двоичное число 10010111В. Старший разряд числа равен единице, это означает, что получено отрицательное число в дополнительном коде. Переведем число в прямой код, для этого в числе 10010111 заменим нули на единицы, а единицы на нули, получим число 01101000, прибавим к нему единицу
01101000
+ 1
01101001
Переведем число 01101001В в десятичную систему счисления и припишем знак минус, получим число –105.
Ответ. Результатом работы заданного оператора
PRINT (NOT (15 OR 51) EQV 85) IMP (15 AND 51)
будет число –105.
2. Какое значение будет выведено следующим оператором языка Basic:
a) PRINT (12 IMP 45) XOR NOT ( 35 AND ( 12 EQV 45))
б) PRINT (11 EQV 25) XOR ( 24 AND NOT ( 15 IMP 14))