русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Приведение типов и функции преобразования типов


Дата добавления: 2015-06-12; просмотров: 1083; Нарушение авторских прав


Object Pascal является сильно типизированным языком. Это означает, что типы данных строго различаются и при вычислении выражений строго выполняются определенные правила и ограничения на использование различных типов. Преимущество сильной типизации состоит в том, что транслятор получает возможность правильно обрабатывать данные и тщательно проверять исходный код, исключая таким образом труднодиагностируемые ошибки времени выполнения. Чтобы лучше понять принципы сильной типизации, выполните следующий фрагмент кода:

var

myChar: Char;

myByte: Byte;

begin

myChar := 'A';

myByte := myChar; {Строка с синтаксической ошибкой!}

end;

Переменные обоих типов (Char и Byte) для хранения своих значений занимают по одному байту памяти. Компилятор генерирует сообщение об ошибке потому, что согласно правилам сильной типизации Object Pascal нельзя присваивать значение типа Char переменной типа Byte и наоборот.

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

тип_данных (выражение);

Например, оператор Integer('А') приводит тип символа А к целому. Значение любой переменной можно привести к любому типу при условии, что исходный и результирующий типы занимают одинаковый объем памяти и не смешиваются целые и вещественные числа.

Теперь можно исправить наш предыдущий пример следующим образом:

var

myChar: Char;

myByte: Byte;

begin

myChar : = 'A';

myByte := Byte(myChar);{Синтаксическая ошибка исправлена!}



end;

Операция приведения типов не преобразует типы значений между вещественными и целыми числами. Однако это можно сделать с помощью встроенных процедур и функций преобразования типов Object Pascal, перечисленных в таблице 7.

Таблица 7 – Процедуры и функции преобразования типов

Функция/Процедура Назначение
CompToCurrency(Value: Comp): Currency; Преобразует значение Comp в значение Currency
CompToDouble(Value: Comp): Double; Преобразует значение Comp в значение Double
CurrencyToComp(Value: Currency; var Result: Comp); Преобразует значение Currency в значение Comp
DoubleToComp(Value: Double; var Result: Comp); Преобразует значение Double в значение Comp
Int(X: Extended): Extended; Возвращает целую часть вещественного значения
Round(X: Extended): Int64; Округление значения x до ближайшего целого значения Int64. Если x находится точно между двумя целыми, то результат всегда является четным числом
Trunc(X: Extended): Int64; Усекает вещественное значение до целого (отбрасывает дробную часть)
Chr(X: Byte): Char; Возвращает символ с порядковым значением X (ASCII)

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

var

numl, result: Real;

num2: Integer;

begin

numl := 7.2;

num2 :=3;

result := numl * num2; {Смешанное арифметическое выражение}

end;

В предыдущем коде num1 является вещественным числом, a num2 – целым. Таким образом, numl * num2 является смешанным арифметическим выражением. Из табл. 7 видно, что для явного преобразования целого типа в вещественный никакой встроенной процедуры нет. Такие процедуры и не нужны, потому что в Object Pascal числовые типы, требующие меньшей памяти, автоматически продвигаются к типам, требующим большей памяти, а целые типы продвигаются к вещественным. Другими словами, преобразование целого типа в вещественный выполняется неявно. Неявное приведение типов данных можно отключить, если указать директиву компилятора {$R+}, которая принуждает компилятор всегда проверять границы и диапазоны.



<== предыдущая лекция | следующая лекция ==>
Арифметические операторы | Встроенные математические функции


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.424 сек.