var xx: boolean; begin xx:= 3 > 7; writeln ('Правда, что 3 > 7?',xx); readln; end. Результат работы программы: Правда, что 3 > 7?FALSE
Результат логического типа получается, в частности, при сравнении чисел, символов, строк. Символы и строки сравниваются по алфавиту, точнее - сравниваются кодировки. Причем для строк - сравниваются символы - слева-направо. Если равны 1-е символы, то сравнивают 2-е и т д.
Проверка вхождения конкретного значения в заданное МНОЖЕСТВО также дает результат
типа Boolean.Например:
... if bukva in ['а','е','и','о','у','э','ю','я'] then write('это - гласная');
Над логическими данными определены операции AND (И) OR (ИЛИ) XOR (исключающее ИЛИ) NOT (НЕ).
X | Y | X AND Y | X OR Y | X XOR Y | NOT X ========================================== F | F | F | F | F | T F | T | F | T | T | T T | F | F | T | T | F T | T | T | T | F | F
var a,b,c: byte; begin a:= 150; b:= 201; c := a+b; writeln('Результат= ',c); readln; end.Возникает ошибка, так как 150+201=351 - больше, чем наибольшее число типа byte, которое равно 255.
Операция / - деление. Здесь результат - число ВЕЩЕСТВЕННОЕ, 5/2 = 2.5;
7 div 3 = 2 (результат - целый, дробная часть отбрасывается).
7 mod 3 = 1 (результат целый равен остатку от деления).
Операции сдвига: Синтаксис:
Выражение1 SHR Выражение2
Оператор SHR сдвигает выражение1 вправо на nnn бит, где nnn - это значение выражения2. Аналогично: shl сдвигает влево. Примеры:
X:= X shr N; Y := X shl 2; Заметим, что сдвиги эквивалентны умножению/делению на 2, но выполняются быстрее.
Логические операции удобны для работы с флагами (отдельными битами). Например, в модуле DOS описаны константы для удобной работы с атрибутами файлов:
Const ReadOnly = $01; Hidden = $02; SysFile = $04; VolumeID = $08; Directory = $10; (=16) Archive = $20; (=32) AnyFile = $3F;
Их можно использовать для поиска файлов с заданными атрибутами. Рассмотрим программу:
uses DOS; const maska='*.txt'; {ищем текстовые файлы} var info: SearchRec; {тип SearchRec (запись) описан в DOS} attr1: byte; {здесь храним атрибуты искомых файлов} begin attr1 :=archive OR readonly; {то есть архивные и только для чтения - ищем} writeln ('Ищем атрибуты = ', attr1); FindFirst(maska,anyfile,info); {} while DOSError = 0 do begin if (info.Attr and attr1) = attr1 {******************} then writeln('FileName= ',info.name,' Attr= ',info.attr); FindNext(info); {ищем следующий такой} end; readln; end. ----------------- Результат работы: ----------------- Turbo Pascal Version 7.0 Copyright (c) 1983,92 Borland International Ищем атрибуты = 33 FileName= ZAM.TXT Attr= 33
Попробуйте изменить помеченную звездочками строку, чтобы отбиралиь и архивные файлы и файлы только для чтения.