Лекция
2.2.12. Символьный тип данных
Величина типа «символ» может принимать значения любых символов компьютерного алфавита. Символьная величина занимает 1 байт памяти, в котором хранится код этого символа, соответствующий используемой кодовой таблице. Заметим, что в Delphi наряду с однобайтовой кодировкой символов используется и двухбайтовая.
Символьная константа записывается между апострофами. Например: ‘R', ' + ', ' 9', ' ] '.
Символьный тип называется char. Пример описания символьных переменных: var cl, c2: char;
Символьный тип относится к порядковым типам данных. Из этого следует:
-
символы — упорядоченное множество;
-
у каждого символа в этом множестве есть свой порядковый номер;
-
между символами работает соотношение «следующий – предыдущий».
Порядковый номер символа — это его десятичный код, который лежит в диапазоне от 0 до 255. Например, в кодовой таблице ASCII десятичный код латинской буквы «А» равен 65, а цифры «5» — 53. О стандартах кодирования символов подробно рассказывалось в параграфе 1.4.2 учебника для 10 класса.
Функция Ord(x)
Ord(x) — функция от аргумента порядкового типа, которая возвращает порядковый номер значения х в этом типе данных. Если х — символьная величина, то результатом функции будет десятичный код х в кодовой таблице. Например:
Ord('A’)=65, Ord('5')=53
Функция Chr(x)
Chr(x) — функция от целочисленного аргумента, результатом которой является символ с кодом, равным х. Например:
Chr(65)='A', Chr(53)='5'.
Функция Pred(x)
Pred (x) — функция от аргумента порядкового типа, которая возвращает символ предшествующий х. Например:
Pred('B')=’A’, Pred('И')=’Й’
Функция Succ (x)
Succ (x) — функция от аргумента порядкового типа, которая возвращает символ следующий за х. Например:
Succ ('B')=’С’, Succ ('И')=’З’
Функция UpCase (х)
UpCase (х) — функция от аргумента порядкового типа, преобразует строчные буквы в заглавные. Если аргументом является символ отличный от буквы, то изменения аргумента не произойдет. Например:
UpCase (‘d’)=’D’, UpCase (‘п’)=’П’ , UpCase (‘@’)=’@’.
Поскольку коды символов лежат в диапазоне от 0 до 255, желательно тип х определять либо как byte, либо как ограниченный тип 0..255. В параграфе 1.4.2 учебника для 10 класса содержится программа получения таблицы кодировки символов с номерами от 20 до 255. В этой программе последовательность кодов и соответствующих им символов получается в следующем цикле:
Writeln (=20 to 255 do Write(Chr(kod):3, kod:4);
Напомним, что коды, меньшие 20, являются управляющими и на экране не отражаются.
Функция Chr является обратной к функции Ord. Отсюда следует: Chr(Ord(x))=x. Например: Chr(Ord('A'))='A'.
Принцип последовательного кодирования алфавитов
В любой кодовой таблице выполняется принцип последовательного кодирования латинского (английского) алфавита и алфавита десятичной системы счисления. Это важное обстоятельство, которое часто учитывается в программах обработки символьной информации.
При выполнении операций отношений применительно к символьным величинам учитываются коды этих величин. Чем больше значение кода, тем символ считается больше. Истинными являются следующие отношения: 'А'<'В', 'Z'>'Y', 'а'>'А'. Значение символьной переменной С является заглавной латинской буквой, если истинно логическое выражение:
(С>='А') and (c<='Z')
Значение символьной переменной С является цифрой, если истинно логическое выражение:
(C>='0') and (C<='9') .
В латинском алфавите 26 букв. Поэтому разница между кодами букв «Z» и «А», а также «z» и «а» равна 25.
Задача 1
С помощью датчика случайных чисел заполнить массив Sim[0..10] строчными английскими буквами. Затем массив отсортировать в алфавитном порядке.

При тестировании программы было получено:
Исходный массив: gnkbeqgmsin
Отсортированный массив: beggikmnnqs
Задача 2
На вход программе подаются строчные английские буквы. Ввод этих символов заканчивается точкой (другие символы, отличные от «.» и букв «a»..«z», во входных данных отсутствуют). Написать программу на Паскале, которая будет выводить буквы, встречающиеся во входной последовательности, в порядке уменьшения частоты их встречаемости. Каждая буква должна быть выведена один раз. Точка при этом не учитывается[1].
Идея алгоритма. Формируется массив символов английского алфавита от «а» до «z». Дадим массиву имя Alf, а элементы пронумеруем от 0 до 25. В другом массиве Schet[0..25] будем вести счетчики повторений каждой буквы в последовательности вводимых символов. В Schet[0] — счетчик «а», в Schet[1] — счетчик «b» и т. д. В начале счетчики обнуляются.
В цикле посимвольно вводятся данные и подсчитывается количество каждой буквы в своем счетчике. Цикл заканчивается, когда будет введена точка. Затем сортируется массив счетчиков по убыванию значений. Применяется алгоритм сортировки методом пузырька. Одновременно с перестановками в массиве Schet производятся аналогичные перестановки в массиве Alf. В конце по порядку выводятся оба этих массива, при этом пропускаются счетчики, равные нулю, и соответствующие им буквы
[1] Задача взята из демоверсии ЕГЭ по информатике.

При тестировании программы была введена последовательность символов:
rgfdeewgree.
В результате получено:
e- 4
g- 2
r- 2
d- 1
f- 1
w- 1