Символьный тип (Сhar) — простой тип данных, предназначенный для хранения одного символа в определённой кодировке. Может являться как однобайтовым (для стандартной таблицы символов), так и многобайтовым (к примеру, для Юникода). Основным применением является обращение к отдельным знакам строки.
Значениями символьного типа char являются элементы конечного и упорядоченного множества символов, зависящего от текущей кодовой таблицы. В языке паскаль это множество состоит из 256 символов, пронумерованных от 0 до 255. В это число символов входят все символы, которые вы можете получить на экране с помощью нажатия какой либо клавиши или комбинации клавиш, а также другие не видимые символы. Первые 128 символов с кодами от 0 до 127 всегда соответствуют так называемым “Ascii – символам ” , а остальные 128 в различных таблицах используются для кодировки букв того или иного алфавита.
Первые 32 символа считаются управляющими, а остальные – изображаемыми, т.е. имеющими графическое изображение. Управляющие символы должны восприниматься устройствами вывода и ввода текста как команды например:
| Символ | Действие | Английское название |
| № 7 | Подача стандартного звукового сигнала | Beer |
| № 9 | Символ табуляции | Tab |
| № 10 | Признак конца строки | End of line (EOLn) |
| № 13 | Перевод строки | Line Feed (Lf) |
| № 26 | Признак конца файла | End OF File (Eof) |
Компилятор с языка программирования
может обрабатывать управляющие символы определенным в нем нестандартным
образом. В тексте программы константы
символьного типа записываются двумя способами. Наиболеее наглядный из них – это
заключение любого изображаемого символа в апострофы. Например: ‘*’, ‘f’, ‘1’. Для того чтобы таким
способом представить сам символ апостроф, его записывают внутри апострофов
дважды: ‘’’’ Второй способ позволяет задавать любые символьные константы. В том
числе и соответствующие управляющим символам, по их кодам. В этом случае
обозначение константы начинается с символа “#”, за которым следует десятичный
код (т.е. номер от 0 до 255) соответствующего символа. Например #13, #65. Если
мы считываем значение символьной переменной с клавиатуры или из файла, то
соответствующий символ должен быть набит уже без апострофов. А если считывается последовательность символов (текст), то они набиваются все подряд, без разделителей, так как и пробел, и другие разделители числовых констант также являются значимыми символами.
Множество символьных констант является упорядоченным так, что символ “c1” считается меньше символа “c2”, если код первого символа соответственно меньше кода второго. Строчные и прописные буквы являются различными символами, то есть 'a' <> 'A', объясняется это тем, что в любой кодовой таблице каждой из них соответствует свой символ. Все строчные и прописные английские буквы, а также символы для десятичных цифр упорядочены между собой, то есть
'0' < '9', 'A' < 'Z' и 'a' < 'z', но 'Z' < 'a'.
Русские буквы одного регистра упорядочены между собой не во всех кодовых таблицах, но чаще всего это так, за исключением буквы Ё.
Символ '0' в таблице ASCII имеет код 48, символ 'A' (английская) — 64.
Рассмотрим операции, применимые к переменным и константам символьного типа. Во-первых, как уже следует из сказанного выше, значения символьных переменных можно считывать, а значения символьных выражений — печатать. Во-вторых, в силу наличия отношения порядка, над символьными выражениями определены все операции отношения: <, >, =, <>, <=, >=. Арифметические действия над данным типом не определены.
С символьным типом связаны следующие функции:
1) функция chr(i) выдает по порядковому номеру символа в кодовой таблице соответствующий символ, следовательно, на месте i может стоять целочисленное выражение, значение которого находится в диапазоне от 0 до 255; если номер является константой, можно использовать также символ "#":#65 означает то же самое, что и chr(65);
2) функция ord(с), наоборот, выдает номер символа с в кодовой таблице, здесь с — или переменная символьного типа, или символьная константа, или функция, результатом выполнения которой является символ (например, chr);
3) функция succ(с) выдает символ, следующий в кодовой таблице за символом “с”. Для последнего символа кодовой таблицы эта функция не определена. То есть с точки зрения данной функции символы не считаются расположенными по кругу, они имеют только линейный порядок; эта функция позволяет обрабатывать символы в циклах;
4) функция pred(с) выдает символ, предшествующий в кодовой таблице символу “с”. Для символа с кодом 0 значение этой функции также не определено;
5) функция upcase(с) переводит символы, обозначающие строчные английские буквы, в прописные, остальные символы (в том числе и соответствующие русским буквам) она оставляет неизменными. Например, upcase('f') есть 'F', а upcase('*') есть '*'. Обратной функции, т.е. функции, переводящей прописные буквы в строчные, в стандартной библиотеке не существует.
Забегая вперед, отметим, что при анализе констант символьного типа часто удобно использовать так называемые “множественные константы”, то есть проверку на принадлежность значения символьной переменной некоему множеству символов. Приведем примеры таких проверок, не вдаваясь в детали синтаксиса:
1) if c in ['a'..'z','A'..'Z'] then writeln('letter');
2) if c in ['1','3','5','7','9'] then writeln('odd digit')
Аналогичные конструкции используются и для целочисленных типов.

