Главная » Free Pascal » Нечисловые данные порядкового типа Free Pascal

0

Как уже отмечалось ранее, к данным порядкового типа относятся такие конеч- ные множества данных, которые можно тем или иным способом упорядочить, т. е. "выстроить" в очередь и приписать каждому элементу порядковый номер, выбрав для этого, например, натуральные числа. Кроме описанных ранее стандартных це- лочисленных типов и интервальных подмножеств целых чисел к порядковым дан- ным относятся:

± данные логического типа;

± перечисления;

± символьные данные.

Данные логического типа

Free Pascal поддерживает данные логического типа, которые могут принимать одно из двух значений — True (Истина) или False (Ложь). Алгебра логики, зало- женная английским математиком Джоном Булем, оперирует логическими (булевы- ми) переменными, которым обычно приписывается одно двух состояний — 1 (т. е. истина) и 0 (т. е. ложь). В языках программирования, допускающих работу с дан- ными типа Boolean, имеет место сходная ситуация. Язык Free Pascal так же, как и Object Pascal, разрешает использовать четыре типа логических данных, специфика которых отражена в табл. 4.3.

Таблица 4.3

Имя типа

Длина в байтах

Числовое значение

True

Числовое значение

False

Boolean

1

1

0

ByteBool

1

Не 0

0

WordBool

2

Не 0

0

LongBool

4

Не 0

0

Казалось бы, что для хранения значения булевой переменной достаточно одно- го бита, в котором может храниться либо 0 (false), либо 1 (true). Но дело в том, что неделимой единицей оперативной памяти является байт, а при обращении к оперативной памяти в зависимости от "ширины" шины данных (это определяется

аппаратурой ПК) можно одновременно выбрать 2, 4 или 8 байт. Дополнительные типы логических данных, предусмотренные языком Free Pascal, обеспечивают связь с программами, написанными на других алгоритмических языках, где могут использоваться приведенные в табл. 4.3 форматы логических данных.

Над логическими данными могут выполняться следующие логические операции:

± логическое сложение (операция "ИЛИ") — or;

± логическое умножение (операция "И") — and;

± логическое отрицание (операция "НЕ") — not;

± исключающее "ИЛИ" — xor.

Результаты выполнения этих операций приведены в табл. 4.4.

Таблица 4.4

x

y

x or y

x and y

x xor y

not x

false

false

false

false

false

true

false

true

true

false

true

true

false

true

false

true

false

true

true

true

true

false

Используя логические переменные и значения логических функций и объеди- няя их знаками логических операций, можно конструировать логические выраже- ния, которые принимают значения true или false. Операндами логических формул могут быть и результаты операций отношения (табл. 4.5).

Таблица 4.5

Операция

Пояснение

Операция

Пояснение

Больше

<=

Меньше или равно

>=

Больше или равно

=

Равно

Меньше

<> 

Не равно

Например, принадлежность значения x интервалу [a, b] определяется истинно- стью выражения:

(a <= x) and (x <= b)

Иногда результат вычисления логической формулы становится известным до того момента, когда проанализированы действия всех операций. Например, если в приведенном выше условии результат сравнения a <= x оказался ложным, то про- верять следующее неравенство смысла не имеет. Это означает, что последние дей- ствия в формуле могут не повлиять на результат вычисления логического выраже- ния. Поэтому большинство разумных компиляторов по умолчанию не производят

обработку логической формулы до конца, если ее значение уже определилось. Од- нако в этом, в общем-то разумном, правиле таится потенциальная опасность. На- пример:

x:=false; y:=x and f(x);

С точки зрения "чистого" математика операция логического умножения комму- тативна, т. е. (a and b) (b and a). C точки зрения программиста при вычислении второго выражения могут возникнуть проблемы. Предположим, что логическая функция f(x) во время своей работы меняет значения аргумента x, а он передавал- ся по ссылке. Поэтому порядок вычисления "сомножителей" может повлиять на результат вычисления формулы. А если функция f(x) выполняет еще какие-то специальные действия, задуманные программистом, то компилятор ее в данной ситуации не вызовет. Поэтому программисту предоставляется возможность преду- предить компилятор о том, что в логической формуле нужно проделать все вычис- ления (см. директиву {$B}).

Источник: Кетков, Ю. Л., Свободное программное обеспечение. FREE PASCAL для студентов и школьников, Ю. Л. Кетков, А. Ю. Кетков. — СПб.: БХВ-Петербург, 2011. — 384 с.: ил. + CD-ROM — (ИиИКТ)

По теме:

  • Комментарии