2.7. Символьный тип
Символьный тип служит для задания символов. Для каждой вычислительной системы определен свой набор символов. Сейчас в основном используется стандарт ASCII, включающий набор из 128 символов. В него входят строчные и прописные буквы латинского алфавита, арабские цифры, специальные знаки и так называемые служебные символы (номера 0..31). В русскоязычной версии прописные буквы латинского алфавита и некоторые специальные знаки заменены на символы кириллицы (русского алфавита), и такой набор называется КОИ-7. В более совершенных вычислительных системах используется расширенный код ASCII, состоящий из 256 символов. Дополнительные 128 - это символы псевдографики. Именно в этой области у нас обычно располагаются символы кириллицы (строчные и прописные буквы).
Каждому символу соответствует его порядковый номер в наборе. Для взаимного отображения символов и их номеров существуют две стандартных функции:
Ord(c) - возвращает порядковый номер символа "с" в наборе;
Chr(k) - возвращает символ по его порядковому номеру "к".
Константы символьного типа в текстах программ записываются в апострофах. Для задания символа "апостроф" его внутри апострофов записывают дважды.
Примеры символьных констант: '+' 'A' ',' '''' (это апостроф).
Константы символьного типа могут задаваться своими номерами, которым предшествует символ #, например #7 #62 #$A1 , что удобно для обозначения символов, не имеющих начертания .
К данным символьного типа применимы операции отношения. Смысл их заключается в проверке на взаимное расположение в наборе ASCII. Например: 'a' < 'b' имеет значение TRUE, поскольку символ 'a' предшествует символу 'b'. Другими словами, в операциях отношения производится сравнение поряд-ковых номеров символов.
При вводе последовательности символов разделители не применяются.
Пример 2.7.1. Ввести 3 символа. Определить, есть ли среди них хотя бы один символ "+".
PROGRAM Plus;
VAR x,y,z : char;
b : Boolean;
BEGIN
Write('Ввести 3 символа: '); ReadLn(x,y,z);
b:=(x='+') OR (y='+') OR (z='+');
WriteLn('Символ ''+'' имеется: ' ,b)
END.
Здесь символ "+" заключен в двойные апострофы для того, чтобы при печати он оказался в одинарных, например:
символ '+' имеется: TRUE .
Пример 2.7.2. Ввести 3 символа. Определить, расположены ли они в порядке возрастания их номеров.
PROGRAM Por;
VAR x,y,z : char;
b : Boolean;
BEGIN
Write('3 символа: '); ReadLn(x,y,z);
b:=(x<y) AND (y<z);
WriteLn('Номера возрастают: ',b)
END.
В этом примере в операторе присваивания можно было бы восполь-зоваться порядковыми номерами символов: b:=(Ord(x)<Ord(y)) AND (Ord(y)<Ord(z)), но приведенный вариант все-таки изящнее.
Задачи
2.7.1. Ввести два символа. Определить, имеется ли среди них хотя бы один символ “#“.
2.7.2. Ввести 3 символа. Определить, есть ли среди них хотя бы два одинаковых.
2.7.3. Ввести символ. Отпечатать в апострофах этот символ вместе с предшествующим и последующим, например: p ®'opq' .