Текстовые типы
Текстовые (символьные) типы - это типы данных, состоящие из одного символа. В Windows используется код ANSI (по названию разработавшего этот код института - American National Standard Institute - американский национальный институт стандартизации). Множество значений символьного типа состоит из 256 различных символов, определенным образом упорядоченных, и содержит символы заглавных и строчных букв, цифр и других различных символов, включая специальные управляющие.
В Object Pascal есть три символьных типа: Char, AnsiChar, и WideChar (табл.9). Тип Char является стандартным типом Pascal. Он использовался и в Turbo Pascal и сейчас в Object Pascal. Типы AnsiChar, и WideChar были добавлены позднее.
Таблица 9 - Символьные типы данных
Название | Размер, байт |
Char | |
AnsiChar | |
WideChar |
Char - любой символ из набора ANSI.
AnsiChar - символы, упорядоченные в соответствии с расширенным набором символов ANSI.
WideChar - это символы, упорядоченные в соответствии с международным набором символов UNICODE. Первые 256 символов совпадают с символами ANSI.
|
|
С типом CHAR работают следующие процедуры и функции:
- функция Ord (Ch), где Ch - любая переменная символьного типа, возвращает целое значение, которым символ Ch представлен в памяти, т.е. порядковый номер этого символа в таблице ANSI.
- для преобразования целой переменной в переменную типа char с тем же порядковым номером предназначена функция Chr(Ch).
- UpCase () преобразует строчную букву в прописную.
Тип CHAR упорядочен по алфавиту: ‘A’<‘B’<‘C’…<‘Z’. Это позволяет сравнивать буквы для их алфавитной сортировки. Наконец, тип CHAR эквивалентен типу BYTE – оба они занимают один и тот же объем памяти. Для эквивалентных типов можно применять операцию типизации, заключающейся в преобразовании типа в нужный. Например, чтобы напечатать символ с кодом n, необязательно делать так:
Label1.Caption:=CHR(n);
Есть другой способ:
Label1.Caption:=CHAR(n);
Здесь CHAR() – операция типизации. Возможна и обратная процедура для получения кода символа:
Label1.Caption:=IntToStr ((BYTE(c)))
Логический тип данных, названный в честь английского математика XIX века Дж. Буля кажется очень простым. Но с ним связан ряд интересных моментов.
Во-первых, к данным этого типа применимы логические операции AND, OR, XOR, NOT. Как правило, труднее всего понять операцию "исключающее ИЛИ" (XOR). Ее смысл: "или одно, или другое, но не оба сразу". Поэтому True XOR False=True, но True XOR True=False.
Во-вторых, допустимы присваивания вида:
VAR l:BOOLEAN;
…
l:=(a>b) OR (c<4);
Очень частая ошибка начинающего программиста – использование оператора IF там, где достаточно применить булевский тип данных. Вот так делать не надо:
IF (a>b) AND (d<0) THEN c:=TRUE
ELSE c:=FALSE;
|
|
Все гораздо проще:
c:=(a>b) AND (d<0);
В-третьих, операции AND и OR могут быть выполнены при неизвестном втором операнде:
IF (a>5) AND (c<d) THEN…
Если a<=5, то условие c<d вообще не проверяется, так как при любом его значении результат всего выражения уже известен.
В Object Pascal имеется пять логических типов: Boolean ByteBool, Bool, WordBool и LongBool, отличающиеся занимаемым объемом памяти (табл.10).
Таблица 10 - Логические типы данных
Название | Размер, байт |
Boolean | |
ByteBool | |
Bool | |
WordBool | |
LongBool |
В стандартном Паскале определен только тип Boolean, остальные логические типы введены в Object Pascal для совместимости с Windows: типы Boolean и ByteBool занимают по одному байту каждый, Bool и WordBool - по 2 байта, LongBool - 4 байта. Значениями логического типа может быть одна из предварительно объявленных констант False (ложь) или True (истина).
При этом справедливы следующие условия:
False < True;
Ord(False) = 0;
Ord(True) <> 0;
Succ(False) = True;
Pred(True) = False.
Фактически для всех логических типов значению False соответствует число 0, которое записывается в указанное в Таблица 10 количество байтов. Отличие логических типов заключается в величине параметра, соответствующего значению True. В величинах типа Boolean этому значению соответствует число 1, а для других типов результату True соответствует любое значение, отличное от нуля. Функция Ord(True) для Boolean вернет 1, а для всех других логических типов возвратит (-1).