Встроенные операции для порядковых типов
Операция | Выполняемые действия |
Low(T) High(T) Ord(X) Pred(X) Succ(X) Dec(X) Inc(X) | Минимальное значение типа T Максимальное значение типа Т Порядковый номер значения Х Возвращает предыдущее значение для Х Возвращает следующее значение для Х Уменьшает Х на единицу Увеличивает Х на единицу |
ЦЕЛЫЕ ТИПЫ
В программных элементах целых типов память интерпретируется в виде информации, представляющей собой целые числа. Целые типы (табл. 3) подразделяются на физические и общие. Физические типы строго занимают определенный объем физической памяти. Общие типы Integer и Cardinal могут занимать различный объем памяти, в зависимости от типа микропроцессора и операционной среды таким образом, чтобы достигалась максимальная эффективность. Целые числа могут записываться как в десятичной, так и в шестнадцатиричной системе счисления. В последнем случае перед числом ставится знак $, а допустимый диапазон значений будет $00000000 .. $FFFFFFFF.
Таблица 3
Целые типы
Тип | Диапазон значений | Физический формат (байты) |
ShortInt Byte SmallInt Word LongInt LongWord Int64 | -128..127 0..255 -32 768..32 767 0..65 535 -2 147 483 648..2 147 483 647 0..4 294 967 295 -263..263-1 | |
Integer Cardinal | Зависит от процессора, стандартно занимают 4 байта |
Целые типы можно складывать, вычитать, умножать. Кроме того, можно выполнять следующие действия (табл. 4):
Таблица 4
Некоторые операции с целым типом
Операция | Результат |
ABS(X) X div Y X mod Y ODD(X) SQR(X) SQRT(X) | Модуль Х Нахождение целой части от деления Вычисление остатка от деления Проверяет на нечётность аргумент X Возводит аргумент X в квадрат Извлекает квадратный корень из аргумента X |
Физические типы следует применять, когда в первую очередь важны именно диапазон значений, зависящий от занимаемой памяти, и сам объем памяти.
Тип Integer является обобщением всех знаковых целых чисел, а Cardinal - всех беззнаковых.
Целый тип является порядковым типом, поэтому с ним возможны операции, приведенные в табл. 2.
СИМВОЛЬНЫЕ ТИПЫ
Смысл символьного типа очевиден при выводе символов на экран или принтер. Обычно символьные типы задают некоторые стандартные схемы кодирования и декодирования информации для обмена символьными данными. Символьная схема должна воспроизводиться так же, как ее определяет операционная система. Существуют две схемы: набор 8-битовых символов, известный как расширенный (extended) ANSI стандарт (American National Standards Institute – Американский национальный институт стандартов) и схема, соответствующая международному стандарту UNICODE и представлящая набор 16-битовых символов, в котором первые 256 символов совпадают с символами, определенными ANSI стандартом.
В Delphi определены два физических символьных типа и один общий. Два физических типа ANSIChar и WideChar реализуют соответственно ANSI стандарт и UNICODE схему. Общий тип, именуемый Char, обычно соответствует типу AnsiChar. Каждый символ имеет свой собственный порядковый номер. Номер символа можно извлечь с помощью функции Ord(С),где С – какой-либо символ.
Значения переменным символьного типа присваиваются или, записывая тот или иной символ в апострофах, например, C := ‘A’;, или, используя порядковый номер того или иного символа, например C := #65;, где 65 – порядковый номер символа A в наборе символов; := - знак присваивания.
ЛОГИЧЕСКИЕ ТИПЫ
Минимальной единицей измерения информации является бит, два состояния которого: 0,1 – можно использовать для записи информации о чем-либо, представляющем одно из двух: да (истина, true, 1) или нет (ложь, false, 0). Информация о чем-либо, что можно представить как истина или ложь, хранится в переменных логического или булевого типа. Для совместимости с языком C++ или другими языками программирования и различными операционными системами имеются три физических булевых типа. Предпочтительней использовать общий Boolean (1 байт) тип. Другие типы именуются следующим образом: ByteBool (1 байт), WordBool (2 байта) и LongBool (4 байта).
Переменным булевого типа можно присваивать только значения true или false. Если память, сответствующая логической переменной типа Boolean, содержит 0, то ее значение равно false, если в памяти содержится 1, то значение логической переменной равно true. В данном случае тип Boolean задает приведенную выше схему интерпретации содержимого памяти. Переменные физических булевых типов интерпретируют содержимое памяти по-другому, – если в памяти содержится 0, значение переменной равно false, при любом другом значении значение переменной равно true. Однако функция Ord всегда возвращает значение 1, если переменная равна true и 0, если значение переменной равно false. Таким образом, порядковый номер false равен 0, а true - 1.
Основное назначение булевых типов – с их помощью выполняются сравнения.
ТИП ПЕРЕЧЕНЬ
Запишем пример объявления типа перечень (иногда этот тип неправильно называют перечисляемым или перечислимым): Type EnumType = (Value1, Value2, Value3);
Обычно данные типа перечень содержат дискретные значения, представляя их не числами, а именами (идентификаторами). Простейшим встроенным типом перечень является тип Boolean, который можно определить следующим образом:
Type Boolean = (false, true);
Единственное, что отличает тип Boolean от типа перечень, это множество операций сравнения, которые встроены в рассматриваемый тип. Тип перечень – это просто список уникальных имен или идентификаторов, зарезервированных программистом для каких-то конкретных целей. Например, можно создать список цветов: Type MyColor = (Red, Green, Blue);
В этом типе объявлены четыре идентификатора: MyColor обозначает соответствующий тип, Red, Green, Blue – значения этого типа. Учитывая, что тип перечень относится к порядковому типу, можно извлечь порядковый номер с помощью функции Ord для каждого значения (Ord(Red) = 0, Ord(Green) = 1, Ord(Blue) = 2).
ИНТЕРВАЛЬНЫЙ ТИП
Интервальный тип (диапазон) позволяет объявить переменные, содержащие информацию из некоторого заданного поддиапазона для какого-то исходного базового типа. Базовый тип должен быть порядковым, кроме типа диапазон. Синтаксис объявления интервального типа имеет следующий вид:
Type D = MinValue..MaxValue;
Диапазон интервального типа определяется двумя константами: MinValue и MaxValue. MinValue определяет минимальное, MaxValue – максимальное - значения среди всех возможных значений для данного типа. Например:
Type Day = 1..31; Var D: Day;
ВЕЩЕСТВЕННЫЙ ТИП
С помощью вещественных типов (табл. 5) вводятся переменные, содержащие числа, которые состоят из целой и дробной частей. Все вещественные типы различаются пороговым (минимальным положительным или отрицательным) и максимальным по модулю значениями. Все типы могут представлять число 0. Если при выполнении вычислений образуется число, меньшее порогового, то в память запишется 0 - произошло исчезновение порядка.
Таблица 5
Вещественные типы
Тип | Пороговое значение | Максимальное по модулю значение | Число значащих цифр | Размер в байтах |
Single Double Extended Comp Currency | 1,5×10-45 5×10-324 3,6×10-4951 0,0001 | 3,4×1038 1,7×10308 1,1×104932 263-1 9,2×1014 | 7 – 8 15 – 16 19 – 20 19 – 20 19 – 20 | |
Real | 5×10-324 | 1,7×10308 | 15 – 16 |
Некоторые операции с этим типом приведены в табл. 6.
Таблица 6
Некоторые операции с вещественным типом
Операция | Результат |
Abs(X) ArcTan(X) Cos(X) Exp(X) Frac(X) Int(X) Ln(X) Pi Round(X) Sin(X) Sqr(X) Sqrt(X) Trunc(X) | Абсолютная величина X Арктангенс X Косинус X Экспоненциальная функция от X Дробная часть Х Целая часть от Х (результат – вещественный) Натуральный логарифм от X Число Пи (3,1416…) Ближайшее к Х целое (результат – целый) Синус X Квадрат X, т. е. X*X Квадратный корень от X Отсекает дробную часть Х (результат – целый) |
Особенность вещественных типов заключается в том, что они представляют некоторое подмножество математических вещественных чисел, которое можно представить в формате с плавающей запятой и фиксированным числом цифр, т. е. точное представление чисел не всегда возможно. Удивительно, но такое простое число, как 0,1, записывается с некоторой погрешностью, пусть очень небольшой. Из-за этого представление чисел с плавающей запятой оказывается неудобным, когда сохраняется и печатается фиксированное число десятичных разрядов, например, при вычислениях с денежными величинами. Для частичного решения этой проблемы введен тип Comp, фактически представляющий собой целые числа, т.е. вещественные числа, дробная часть которых равна 0. В этом типе, например, можно записывать денежные суммы, предварительно умножив их на 100, соответственно нужно делить на 100, если требуется получить копейки.
Тип Currency (денежный) введен для удобства работы с денежными суммами. Физически значения в соответствии с этим типом записываются как целые числа в память того же объема, что и в случае типа Comp. Однако в этот тип встроено автоматическое представление чисел в виде рублей и копеек. Компилятор не забывает умножать их на 10000 перед записью в память и делить их на 10000 при выполнении вычислений - таким образом, обеспечивается точность расчетов в четыре знака после запятой.
ТИП ДАТА-ВРЕМЯ
Стандартный тип дата-время TDateTime, определенный в модуле System, совпадает с типом Double. Например, если определена константа типа дата-время 35065.75, то это число означает 1 января 1996г., 18.00. Способ преобразования этого числа в дату-время встроен в тип. Целая часть числа типа TDateTime задаёт число дней, прошедшее с 30 декабря 1899 года, а дробная часть - прошедшую долю текущих суток. Символьное представление типа дата-время определяется установками Windows. Различные функции преобразования находятся в модуле SysUtils.
ВЫРАЖЕНИЯ
Многие операторы содержат в своём составе конструкции, называемые выражениями. Выражение - это синтаксическая единица языка, определяющая способ вычисления некоторого значения. В выражении выполняются некоторые действия над параметрами. Рассмотрим множество операций и параметров, используемых в выражениях.
КОНСТАНТЫ
Константами называют параметры, значения которых не могут изменяться в процессе выполнения программы. В выражениях возможно двоякое использование констант:
· непосредственное использование значения константы;
· использование имени константы.
В качестве констант могут использоваться значения различных типов. Представление числовых констант возможно не только десятичное, но и шестнадцатеричное, например $F5, где первый символ указывает, что далее следует шестнадцатеричная константа.
Для задания имени константы используется следующее описание: const <имя> = <значение>; - например,
const a = 5; s = ’Pascal’;.В описании const можно использовать константные выражения: const b = Pi/4;.Все вычисления константных выражений выполняются на стадии компиляции. Код программы не увеличивается при использовании поименованных констант.
ТИПИЗИРОВАННЫЕ КОНСТАНТЫ.
Данное название не совсем удачное, т.к. типизированнаяконстанта представляет собой фактически переменную. Название это появилось потому, что типизированная константа определяется ключевым словом const, например,
Const Maximum: integer = 100;
Не будет ошибки, если вместо данной строки записать:
Var Maximum: integer = 100;
Maximumявляется переменной типа integer, а число 100 определяет начальное значение для этой переменной. Таким образом, типизированные константы используются для задания начального значения переменных.
Использование типизированных констант зависит от директивы компилятора {$J}. Если она выключена {J-}, типизированные константы становятся просто константами, если она включена {J+} (устанаовлено по умолчанию) – типизированная константа представляет собой инициализированную переменную.
ПЕРЕМЕННЫЕ
Переменными называют параметры, значения которых могут изменяться в процессе выполнения программы. Запишем следующие примеры объявления переменных:
Var a: integer;
x,y: single;
operat: (plus, minus, mult, divide);
m: 1..12;
В данном случае объявлены пять переменных: a – целого, x, y – вещественного, operat – перечень и m – интервального типов.
ОПЕРАЦИИ
Можно выделить следующие операции:
· арифметические;
· логические;
· операции над битами;
· операции отношения;
· операции со строками;
· операции с множествами;
· операции над объектами;
· адресная операция @.
Арифметические операции для вещественных чисел определяются с помощью символов: +, -, *, /. Для целых чисел определены пять операций:+, -, *, div (деление нацело), mod(остаток от деления), например,
A div B; {если A = 7, а B = 3, то результат равен 2}
C mod 3; {если C = 10, то результат равен 1}
Логические операции применяются к операндам логического типа, как, например, приведено в табл. 7.
Таблица 7
Унарная операция not (отрицание)
Значение операнда X | Результат операция not X |
True | False |
False | True |
Результат вычисления логической операции получается также логического типа. Определяются эти операции специальными таблицами (табл. 7, табл. 8). Имеются четыре логические операции: одна унарная операция not и три бинарные: and – логическое И (конъюнкция), or – логическое ИЛИ (дизъюнкция), xor – ИСКЛЮЧАЮЩЕЕ ИЛИ.
Таблица 8