Песни о Паскале | страница 131
> I:= B; W:=B; L:= W; L:=I;
> { Эти операторы могут повлечь нарушения диапазонов }
> B:=I; I:=W; W:=L;
Когда число N не помещается в переменной, то в неё попадает лишь младшая часть числа N (т.е. остаток от деления N mod 256 или N mod 65536).
Целое и символ
Взаимно превращать эти типы данных мы научились при шифровании символа; напомню об этом. Функция Ord возвращает числовой код любого порядкового типа, в том числе и символа. А функция Char делает обратный фокус, превращая число в символ, вот примеры:
> Writeln ( Ord(’D’) ); { 68 }
> Writeln ( Char(68) ); { D }
Как видите, число в символ преобразуется через имя типа Char. Это общий прием, волшебная палочка для обращений типов данных. Например, булевых.
Целое и булево
Превратить булево в целое можно все той же функцией Ord.
> Writeln ( Ord(False) ); { 0 }
> Writeln ( Ord(True) ); { 1 }
А для обратного превращения воспользоваться именем типа Boolean.
> Writeln ( Boolean(0) ); { False }
> Writeln ( Boolean(1) ); { True }
Целое и перечисление
Вернемся к перечислению месяцев, вымышленному нами в предыдущей главе, где переменная была объявлена так:
>var m : (Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec);
Превратить значение такой переменной в число можно функцией Ord. А наоборот? Пока нам этого не удавалось. Но после объявления пользовательского типа данных задача решается очень просто.
>Type TMonth = (Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec);
>Var m : TMonth;
> ...
> m:= 3; { это ошибка }
> m:= TMonth(3); { это равнозначно m:= Apr (счет идет от нуля) }
Здесь объявлен пользовательский перечислимый тип TMonth (Month – «месяц»), далее вы вольны применять его и для объявления переменных, и для преобразования типов. Вот где проявляется сила пользовательского типа!
Вещественное и вещественное
Подобно целому братству, вещественное братство дружно между собой. Переменной одного вещественного типа можно присвоить значение другого типа, при условии, что это значение поместится в новое «жилище», то есть, не приведет к нарушению диапазона.
Целое и вещественное
Вещественным переменным можно присваивать целые значения, не задумываясь о последствиях, – преобразование происходит автоматически. Но обратная операция не так проста, поскольку здесь надо решить судьбу дробной части вещественного числа, которая не попадет в целочисленную переменную. Есть две возможности: либо отбросить дробную часть, либо округлить вещественное число до ближайшего целого. Для этого Паскаль предлагает две функции, возвращающие целочисленные значения: Trunc – усечение, и Round – округление. Вот примеры их вызова.