Назад Домой! Дальше Лекция 1_2. Простые типы: целые числа и логические данные.


Логические данные

- могут иметь всего 2 значения: true (истина) и false (ложь). Занимают 1 байт памяти, причем true хранится как 00000001 (показан каждый бит), то есть 1, а false - как 0. Пример:
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 | 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

Численные константы

Шестнадцатеричная целочисленная константа записывается со знаком доллара ($) в качестве префикса, например $1F (= 31);
Инженерная запись (E или e, сопровождаемые экспонентой) читается как "десять в степени" в вещественных типах. Например:
7E-2 равно 7 умножить на 10 в -2 степени.
12.25e+6 или 12.25e6 равны 12.25 умножить на 10 в 6-ой степени.
Числа с десятичными точками или экспонентами обозначают константы вещественного типа.

Действия над целыми:

+ - * всё понятно. Единственная тонкость - возможность переполнения, то есть:
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 (результат целый равен остатку от деления).

Над целыми разрешены логические операции. Они совершаются над соответсвующими битами операндов, причем 0 --> FALSE, 1 --> TRUE.
Например, 5 AND 12 = 4, потому что:
510  = 000001012
1210 = 000011002
--------
       000001002 = 410

Операции сдвига: Синтаксис:
Выражение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

Попробуйте изменить помеченную звездочками строку, чтобы отбиралиь и архивные файлы и файлы только для чтения.

Назад Дальше

Rambler's Top100
Hosted by uCoz