- •От автора
- •1. Общая схема решения задачи на персональном компьютере
- •2. Структура программы на языке Паскаль
- •3. Арифметические типы данных. Числовые константы и переменные. Оператор присваивания. Выражение
- •4. Операторы ввода-вывода
- •5. Арифметические операции. Стандартные математические функции
- •6. Символьный тип данных
- •7. Логический тип данных. Операции сравнения. Логические операции
- •8. Условный оператор. Блок. Оператор выбора
- •9. Операторы цикла
- •10. Метки. Оператор Goto. Процедура Halt
- •11. Интервальные типы данных. Оператор Type. Массивы
- •Var a : Array[1..33000] Of Word;
- •Var a : Array[1..3] Of Real;
- •Var e,f : Massiv;
- •Var a : Array[1..10] Of Array[1..20] Of Real;
- •12. Процедуры и функции. Сфера действия описаний
- •13. Открытые массивы и нетипизированные параметры
- •14. Множества
- •15. Тип String
- •16. Графические средства языка Паскаль
- •17. Особенности вещественных вычислений
- •18. Записи
- •19. Тип "перечисление"
- •20. Модуль Crt
- •Var TextAttr : Byte
- •21. Модули. Создание и использование модулей
- •Interface
- •Implementation
- •22. Файлы
- •23. Другие средства обработки файлов и модуль dos
- •24. Процедурные типы
- •25. Указатели и динамическая память
- •26. Динамические структуры: списки, деревья
- •27.Открытые строки
- •28. Использование командной строки и вызов внешних программ
- •29. Обработка программных прерываний
- •30. Объекты
- •31.Рекурсия и динамическое программирование
- •32. Рекурсия и стек отложенных заданий
- •33. Стеки и очереди
- •34. Комбинаторные алгоритмы
- •35. Бинарные деревья
- •36. Упорядоченные бинарные деревья и приоритетные очереди
- •37. Алгоритмы сортировки
- •38. Графы
- •Рекомедуемая литература
- •Содержание
7. Логический тип данных. Операции сравнения. Логические операции
Логические, или булевские, данные предназначены для хранения логических значений “истина” или “ложь”. Логические переменные и константы имеют тип Boolean и занимают в памяти 1 байт. Существует всего две логические константы - True и False. Тип Boolean - это порядковый тип, поэтому для него определены функции Ord, Pred, Succ и процедуры Inc и Dec (впрочем, довольно редко применяемые), причем Ord(False) =0, Ord(True) =1. Прежде чем перейти к логическим операциям, рассмотрим операции сравнения, которых в Паскале существует шесть :
= равно
<> не равно
< меньше
<= меньше или равно
> больше
>= больше или равно
Операции сравнения определены для любых однотипных операндов (числовых, символьных, логических), для числовых данных, так же как и в случае арифметических операций, сделано исключение - вы можете сравнивать два числовых выражения любых типов, но сравнивать число и символ, число и логическую величину, символ и логическую величину нельзя. Результат операции сравнения есть True или False, в зависимости от того, выполнено или не выполнено условие. Числа сравниваются между собой естественным образом, символы - в соответствии с их номерами, а для логических величин справедливо неравенство False<True. Логических, или булевских, операций в Паскале четыре:
Not - логическое отрицание;
And - логическое "и";
Or - логическое "или";
Xor - логическое исключающее "или".
Правила выполнения этих операций таковы:
Not - унарная (т.е. применимая к одному операнду) операция :
Not False = True , Not True = False
Правила выполнения бинарных операций And, Or и Xor приведены в таблице:
a |
b |
a And b |
a Or b |
a Xor b |
False |
False |
False |
False |
False |
False |
True |
False |
True |
True |
True |
False |
False |
True |
True |
True |
True |
True |
True |
False |
Логические операции совпадают по написанию с соответствующими битовыми операциями - это не случайно, фактически это одни и те же операции, и правила их выполнения станут совершенно одинаковыми, если нулевой бит считать логическим значением False, а единичный бит - значением True (именно таким образом и кодируются логические данные в памяти компьютера). Приоритеты логических операций точно такие же, как у соответствующих битовых операций, а приоритеты операций сравнения ниже, чем у всех арифметических и логических операций. Если мы хотим записать логическое выражение, которое будет истинным тогда и только тогда, когда x меньше y и z больше 100, то запись x<y And z>100 будет неверной, так как сначала будет выполняться операция And (в данном случае как битовая, а не логическая). Чтобы повысить приоритет операций сравнения, нужно использовать скобки: (x<y)And(z>100). Существует функция, определенная для целочисленных аргументов и имеющая логическое значение, это функция
30. Odd(x),
она возвращает True, если значение x нечетное, и False, если оно четное. Логические значения можно выводить процедурой Write, но вводить логические переменные процедурой Read нельзя. Теперь попробуем записать программу, использующую логические данные.
Var a,b,c,d : Integer;
Begin
WriteLn('Введите 4 целых числа, a,b,c и d, среди ',
'которых должно быть 2 и только 2 одинаковых!');
Read(a,b,c,d);
WriteLn('Вашу понятливость можно оценить как ',
(a=b)And(a<>c)And(a<>d)And(c<>d)Or
(a=c)And(a<>b)And(a<>d)And(b<>d)Or
(a=d)And(a<>b)And(a<>c)And(b<>c)Or
(b=c)And(b<>a)And(b<>d)And(a<>d)Or
(b=d)And(b<>a)And(b<>c)And(a<>c)Or
(c=d)And(c<>a)And(c<>b)And(a<>b));
ReadLn;
End.
Программа выведет True, если введенные данные удовлетворили условию, и False в противном случае.
Еще четыре стандартных функции (без аргумента), возвращающие логические значения, используются при вводе данных:
31. EoLn - конец строки при символьном вводе.
32. EoF - конец файла при символьном вводе.
33. SeekEoLn - конец строки при числовом вводе.
34. SeekEoF - конец файла при числовом вводе.
Функция EoLn возвращает значение True, если очередным символом во входном потоке является символ конца строки (Enter), и False в противном случае. Функция EoF возвращает True, если очередным символом во входном потоке является символ конца файла (Ctrl-Z). Функции SeekEoLn и SeekEoF отличаются тем, что они пропускают все пробельные символы во входном потоке, для функции SeekEoF пробельным является и символ Enter. Примеры использования этих черезвычайно полезных функций будут приведены несколько позже.