…

      M:= D;       { здесь возможна смысловая ошибка }

Здесь объявлены две переменные: M – номер месяца в году, и D – номер дня недели. Это сделано через диапазоны, что гарантирует соблюдение границ. Но ничто не мешает нам присвоить месяцу значение дня, – ведь это не нарушит установленных пределов. Другое дело – смысл. Есть ли смысл в таком присваивании, или налицо ошибка программиста? Вероятней всего – последнее. Выявить ошибки такого рода помогает ещё один тип данных – перечисление.

Перечислением программист дает имена всем возможным значениям переменных, эти имена перечисляются внутри круглых скобок. Например, переменные M1 и M2 могут быть объявлены через сокращенные названия месяцев, а переменные D1 и D2 – через сокращенные названия дней недели.

var M1, M2 : (Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dcb);

      D1, D2 : (Mond, Tues, Wedn, Thur, Frid, Satu, Sund);

Теперь компилятор разрешит присваивать переменным только объявленные значения, например:

      M1:= Apr;       { допустимо }

      M1:= M2;       { допустимо }

      M1:= 3;       { ошибка }

      M1:= Jan+2;       { ошибка }

      D2:= M1;       { ошибка }

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

var B : ( FALSE, TRUE );       { равнозначно B : Boolean; }

Имена в перечислениях – это не строковые константы. Поэтому имя Jan и строка «Jan» совсем не одно и то же. Иначе говоря, оператор Write(M1) не напечатает вам название месяца, который содержится в переменной M1. Вы спросите, а как же печать булевых данных? Ведь они печатаются как «TRUE» и «FALSE». Да, но это единственное исключение.

Порядковые типы

Итак, вы познакомились с пятью числовыми типами данных, диапазонами и перечислениями. Вместе с булевым и символьным типами они составляют семейство порядковых типов данных, а значит, имеют общие свойства и области применения. Рассмотрим их.

Определение порядкового номера

Название «порядковый» говорит о том, что значения этих типов данных упорядочены относительно друг друга. С числами все ясно, – здесь порядок очевиден. А символы? Если вспомнить алфавит и таблицу кодировки символов, вопрос отпадет.

Хорошо, а как насчет перечислений и булевого типа? Оказывается, в памяти компьютера они тоже хранятся как числа. Например, упомянутое выше перечисление месяцев в памяти компьютера кодируется числами 0, 1, 2 и так далее, то есть как числовой диапазон 0..11. Таким образом, значение Jan соответствует нулю, Feb – единице и так далее. Подобным образом кодируются и булевы данные: FALSE – нулем, а TRUE – единицей.

В Паскале есть функция, определяющая числовой код данных любого порядкового типа. Она называется Ord (от Order – «порядок»), вот примеры её применения (в комментариях указаны результаты).

      Writeln ( Ord(5) );       { 5 }

      Writeln ( Ord(’F’) );       { 70 – по таблице кодировки}

      Writeln ( Ord(Mar) );       { 2 – смотри перечисление месяцев }

      Writeln ( Ord(False) );       { 0 }

      Writeln ( Ord(True) );       { 1 }

Для числа функция возвращает само число, для символа – код по таблице кодировки, а для перечислений – порядковый номер в перечислении, считая с нуля.

Сравнение

Вы читаете Песни о Паскале
Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату