Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции ЯП (Кузьмин) ч.2_new (Паскаль).docx
Скачиваний:
3
Добавлен:
01.07.2025
Размер:
4 Мб
Скачать
☆

6.4.4 Перечисляемый тип.

При описании переменной этого типа задается (правда, не напрямую, а косвенно) список ее возможных значений. Этот список задается в виде последовательности имен идентификаторов (каждый идентификатор соответствует одному значению), разделенных запятыми. При этом список заключается в круглые скобки:

Var

0 1 2 3 4 5 ----- в программу вместо имен будут подставлены эти значения

v:(a, b, c, d, e, f);

идентификаторы

Правила для нахождения значений, соответствующих именам этого списка: самому левому значению соответствует - 0; следующему соответствует 1, и так далее - каждому следующему (слева направо) идентификатору соответствует значение на 1 большее, чем у соседа слева.

Смысл этого типа: как и при использовании простых констант здесь используются имена вместо чисел.

Если булевский тип не был бы введен, то мы его бы ввели таким образом:

type

boolean = (false, true);

Хранятся данные этого типа очень компактно. Если вы перечисляете не более 256 имен, то хранится переменная в одном байте; если >256 но < 65535 то занимает 2 байта. Это действительно компактно, если учесть, что для описания 65535 переменных требуется как минимум 65535 байт. Из вот такой компактной формы хранения этих переменных невозможно выводить значение этих переменных на экран и вводить с клавиатуры. Нельзя написать следующую конструкцию:

write (V);

Однако можно посмотреть значение такой переменной в окне Watch.

Примечание:

Обычной ошибкой в объявлении переменных перечисляемого типа является перечисление не имен, а самих значений, которым эти имена соответствуют.

Var

v: (1, 2, 3, 4, 5, 6); нельзя!

Вопрос: что можно присвоить переменной этого типа – имя (из перечня) или число?

6.4.5 Тип – диапазон

Переменные данного типа объявляются с использованием указания левой и правой границы диапазона.

Общий вид:

Var

v: левая .. правая ;

Примечание 1.

Правая граница должна быть обязательно больше, чем левая.

ПРИМЕР:

Var

v: 1..10; {правильная запись}

v: 10..1; {неправильная запись}

Примечание 2.

Базовым типом для типа-диапазона может быть любой порядковый тип, кроме типа-диапазона. В рассмотренном выше случае базовым является целый тип.

Var

s: ‘a‘..’z’; - базовым является символьный (char) тип.

Примечание 3.

Когда в объявлении типа указывается левая и правая границы, то этим вы указываете компилятору, что возможные значения переменных могут находиться только в этом диапазоне. И компилятор далее будет за этим тщательно следить, включая в программу соответствующие дополнительные команды для проверки.

Примечание 4.

Если включена опция компилятора Range Checking или использована директива компилятора {$R+} в программе, то это заставляет компилятор выполнять проверку выхода значения переменной за указанный диапазон.

6.4.6 Символьный тип

Объявляется следующим образом:

Var

c: char;

Переменная этого типа занимает 1 байт без знака. Диапазон значений от 0 до 255.

Для каждой переменной символьного типа в памяти хранится код символа (порядковый номер символа в таблице кодов ASCII), то есть:

c := ‘ ‘; ------ храниться будет 3210.

c := ‘1’; ------- храниться будет 6110.

Для переменных символьного типа применяются три стандартные функции:

Ord (‘ ’)=32 - возвращает порядковый номер символа в кодировочной таблице ASCII

Pred (‘b’)=’a’ - возвращает значение предыдущего аргументу символа в таблице кода ASCII

Succ (‘a’)=’b’ - возвращает следующий за аргументом по порядку символ в таблице кодов ASCII.

Над переменными символьного типа, кроме трех стандартных функций, могут использоваться операции отношения. Для правильного применения этих операций необходимо учитывать следующие правила:

  1. в таблице ASCII символы с изображением цифр расположены так, что символу, которому соответствует большая цифра, соответствует больший номер.

  2. в таблице ASCII cимволы с изображением латинских букв расположены в соответствии с их порядком в алфавите.

  3. в таблице ASCII вначале расположены все цифры, потом все латинские буквы, а потом все русские.

  4. в таблице ASCII вначале расположены все заглавные (прописные) латинские буквы, а потом - все маленькие (строчные).

  5. Расстояние между прописной буквой и такой же строчной равно 32.

Для полученных значений переменной символьного типа по коду символа используется функция Chr:

Var c := chr(b)

b: byte;

c: char; b c

begin

b := 25; b := ord(c)

c := Chr(b);

b := Ord(c);

Переменной символьного типа можно присвоить значение следующими способами:

1). c := ‘a’;

2). c:=#61; - символ с кодом 61 в 10 системе счисления

3). c:=#$20; - символ с кодом 32 в 10 системе счисления