top of page

Лекция

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

© 2016 «Электронный учебник». Сайт создан на Wix.com

  • Белая иконка facebook
  • Иконка Twitter с прозрачным фоном
  • White Google+ Icon
  • White YouTube Icon
bottom of page