Простые типы.
Структурированные типы данных
Использование перечисляемых типов повышает надежность программ благодаря возможности контроля тех значений, которые получают соответствующие переменные. В Object Pascal допускается обратное преобразование: любое выражение типа Word можно преобразовать в значение перечисляемого типа, если только значение целочисленного выражения не превышает мощности этого типа. Такое преобразование достигается… Читать ещё >
Простые типы. Структурированные типы данных (реферат, курсовая, диплом, контрольная)
К простым типам относятся порядковые, вещественные типы и тип дата-время.
Порядковые типы отличаются тем, что каждый из них имеет конечное количество возможных значений. Эти значения можно определенным образом упорядочить (отсюда — название типов) и, следовательно, с каждым из них можно сопоставить некоторое целое число — порядковый номер значения.
Вещественные типы, строго говоря, тоже имеют конечное число значений, которое определяется форматом внутреннего представления вещественного числа. Однако количество возможных значений вещественных типов настолько велико, что сопоставить с каждым из них целое число (его номер) не представляется возможным.
Тип дата-время предназначен для хранения даты и времени. Фактически для этих целей он использует вещественный формат.
Порядковые типы
К порядковым типам относятся (см. рис. 1.1) целые, логические, символьный, перечисляемый и тип-диапазон. К любому из них применима функция Ord (x), которая возвращает порядковый номер значения выражения X.
Для целых типов функция ord (x) возвращает само значение х, т. е. Ord (X) = х для х, принадлежащего любому целому типу. Применение Ord (x) к логическому, символьному и перечисляемому типам дает положительное целое число в диапазоне от 0 до 1 (логический тип), от 0 до 255 (символьный), от 0 до 65 535 (перечисляемый). Тип-диапазон сохраняет все свойства базового порядкового типа, поэтому результат применения к нему функции ord (х) зависит от свойств этого типа.
К порядковым типам можно также применять функции:
pred (x) — возвращает предыдущее значение порядкового типа (значение, которое соответствует порядковому номеру ord (х) -1, т. е. оrd (рred (х)) = оrd (х) — 1;
succ (х) — возвращает следующее значение порядкового типа, которое соответствует порядковому номеру ord (х) +1, т. е. оrd (Succ (х)) = оrd (х) + 1.
Например, если в программе определена переменная.
var.
с: Char;
begin.
с := '5';
end;
то функция PRED© вернет символ '4', а функция SUCC (с) — символ '6'.
Если представить себе любой порядковый тип как упорядоченное множество значений, возрастающих слева направо и занимающих на числовой оси некоторый отрезок, то функция pred (x) не определена для левого, a succ (х) — для правого конца этого отрезка.
Целые типы. Диапазон возможных значений целых типов зависит от их внутреннего представления, которое может занимать один, два, четыре или восемь байтов. В табл. 1.1 приводятся названия целых типов, длина их внутреннего представления в байтах и диапазон возможных значений.
Таблица 1.1 — Целые типы.
Название. | Длина, байт. | Диапазон значений. |
Cardinal. | 0.. 2 147 483 647. | |
Byte. | 0…255. | |
Shortint. | — 128…+127. | |
Smallint. | — 32 768…+32 767. | |
Word. | 0…65 535. | |
Integer. | — 2 147 483 648…+2 147 483 647. | |
Longint. | — 2 147 483 648…+2 147 483 647. | |
Int64. | — 9*1018…+9*1018. | |
LongWord. | 0.. .4 294 967 295. |
Типы LongWord и Int64 впервые введены в версии 4, а типы Smallint и Cardinal отсутствуют в Delphi 1. Тип integer для этой версии занимает 2 байта и имеет диапазон значений от -32 768 до +32 767, т. е. совпадает с Smallint.
При использовании процедур и функций с целочисленными параметрами следует руководствоваться «вложенностью» типов, т. е. везде, где может использоваться word, допускается использование Byte (но не наоборот), в Longint «входит» Smallint, который, в свою очередь, включает в себя Shortint.
Перечень процедур и функций, применимых к целочисленным типам, приведен в табл. 1.2. Буквами b, s, w, i, l обозначены выражения соответственно типа Byte, Shortint, Word, Integer и Longint,.
х — выражение любого из этих типов; буквы vb, vs, vw, vi, vl, vx обозначают переменные соответствующих типов. В квадратных скобках указывается необязательный параметр.
Таблица 1.2 — Стандартные процедуры и функции, применимые к целым типам.
Обращение. | Тип результата. | Действие. |
abs (x). | x. | Возвращает модуль x. |
chr (b). | Char. | Возвращает символ по его коду. |
dec (vx [, i]). | ; | Уменьшает значение vx на i, а при отсутствии i — на 1. |
inc (vx[, i]). | ; | Увеличивает значение vx на i, а при отсутствии iна 1. |
Hi (w). | Byte. | Возвращает старший бант аргумента. |
Hi (I). | То же. | Возвращает третий по счету байт. |
Lo (i). | ". | Возвращает младший байт аргумента. |
Lo (w). | ". | То же. |
odd (l). | Boolean. | Возвращает True, если аргумент-нечетное число. |
Random (w). | Как у параметра. | Возвращает псевдослучайное число, равномерно распределенное в диапазоне 0…(w-l). |
sqr (x). | X. | Возвращает квадрат аргумента. |
swap (i). | Integer. | Меняет местами байты в слове. |
swap (w). | Word. | Тоже. |
При действиях с целыми числами тип результата будет соответствовать типу операндов, а если операнды относятся к различным целым типам — общему типу, который включает в себя оба операнда. Например, при действиях с shortint и word общим будет тип integer. В стандартной настройке компилятор Delphi не вырабатывает код, осуществляющий контроль за возможной проверкой выхода значения из допустимого диапазона, что может привести к недоразумениям.
Логические типы. К логическим относятся типы Boolean, ByteBool, Bool, wordBool и LongBool. В стандартном Паскале определен только тип Boolean, остальные логические типы введены в Object Pascal для совместимости с Windows: типы Boolean и ByteBool занимают по одному байту каждый, Bool и WordBool — по 2 байта, LongBool — 4 байта. Значениями логического типа может быть одна из предварительно объявленных констант False (ложь) или True (истина).
Поскольку логический тип относится к порядковым типам, его можно использовать в операторе цикла счетного типа. В Delphi 32 для Boolean значение.
Ord (True) = +1, в то время как для других типов (Bool, WordBool и т. д.).
Ord (True) = -1, поэтому такого рода операторы следует использовать с осторожностью! Например, для версии Delphi 6 исполняемый оператор showMessage (' —- ') в следующем цикле for не будет выполнен ни разу:
var.
L: Bool;
k: Integer;
begin.
for L:= False to True do.
ShowMessage ('—);
end;
Если заменить тип параметра цикла L в предыдущем примере на Boolean, цикл будет работать и сообщение дважды появится на экране. [Для Delphi версии 1 и 2 ord (True) =+1 для любого логического типа.].
Символьный тип. Значениями символьного типа является множество всех символов ПК. Каждому символу приписывается целое число в диапазоне 0…255. Это число служит кодом внутреннего представления символа, его возвращает функция ord.
Для кодировки в Windows используется код ANSI (назван по имени American National Standard Institute — американского института стандартизации, предложившего этот код). Первая половина символов ПК с кодами 0… 127 соответствует таблице 1.3. Вторая половина символов с кодами 128…255 меняется для различных шрифтов. Стандартные Windows-шрифты Arial Cyr, Courier New Cyr и Times New Roman для представления символов кириллицы (без букв «ё» и «Ё») используют последние 64 кода (от 192 до 256): «А»… «Я» кодируются значениями 192.223, «а»… «я» — 224…255. Символы «Ё» и «ё» имеют соответственно коды 168 и 184.
Таблица 1.3 — Кодировка символов в соответствии со стандартом ANSI.
Код. | Символ. | Код. | Символ. | Код. | Символ. | Код. | Символ. |
NUL. | BL. | '. | |||||
ЗОН. | ! | А. | а. | ||||
STX. | ". | В. | b. | ||||
ЕТХ. | #. | С. | с. | ||||
EOT. | $. | D. | d. | ||||
ENQ. | %. | Е. | е. | ||||
ACK. | &. | F. | f. | ||||
BEL. | '. | G. | д. | ||||
8'. | BS. | (. | Н. | h. | |||
HT. | ). | I. | i. | ||||
LF. | *. | J. | j. | ||||
VT. | К. | k. | |||||
FF. | F. | L. | |||||
CR. | ; | М. | m. | ||||
SO. | N. | n. | |||||
SI. | о. | ||||||
DEL. | Р. | P. | |||||
DC1. | Q. | q. | |||||
DC2. | R. | r. | |||||
DC3. | S. | s. | |||||
DC 4. | Т. | t. | |||||
NAK. | U. | u. | |||||
SYN. | V. | v. | |||||
ETB. | W. | W. | |||||
CAN. | х. | x. | |||||
EM. | Y. | У. | |||||
SUB. | : | Z. | .122. | z. | |||
ESC. | ; | t. | {. | ||||
FS. | < | ||||||
GS. | =. | ]. | }. | ||||
RS. | > | Л. | ~. | ||||
US. | F. | r. |
Символы с кодами 0…31 относятся к служебным кодам. Если эти коды используются в символьном тексте программы, они считаются пробелами.
К типу char применимы операции отношения, а также встроенные функции:
Сhаr (в) — функция типа char; преобразует выражение в типа Byte в символ и возвращает его своим значением;
UpCase (CH) — функция типа char; возвращает прописную букву, если сн — строчная латинская буква, в противном случае возвращает сам символ сн (для кириллицы возвращает исходный символ).
Перечисляемый тип. Перечисляемый тип задается перечислением тех значений, которые он может получать. Каждое значение именуется некоторым идентификатором и располагается в списке, обрамленном круглыми скобками, например:
type.
colors = (red, white, blue);
Применение перечисляемых типов делает программы нагляднее.
Соответствие между значениями перечисляемого типа и порядковыми номерами этих значений устанавливается порядком перечисления: первое значение в списке получает порядковый номер 0, второе — 1 и т. д. Максимальная мощность перечисляемого типа составляет 65 536 значений, поэтому фактически перечисляемый тип задает некоторое подмножество целого типа word и может рассматриваться как компактное объявление сразу группы целочисленных констант со значениями 0, 1 и т. д.
Использование перечисляемых типов повышает надежность программ благодаря возможности контроля тех значений, которые получают соответствующие переменные. В Object Pascal допускается обратное преобразование: любое выражение типа Word можно преобразовать в значение перечисляемого типа, если только значение целочисленного выражения не превышает мощности этого типа. Такое преобразование достигается применением автоматически объявляемой функции с именем перечисляемого типа.
Тип-диапазон. Тип-диапазон есть подмножество своего базового типа, в качестве которого может выступать любой порядковый тип, кроме типа-диапазона.
Тип-диапазон задается границами своих значений внутри базового типа:
.
Здесь — минимальное значение типа-диапазона; - максимальное его значение.
Тип-диапазон не обязательно описывать в разделе type, а можно указывать непосредственно при объявлении переменной.
При определении типа-диапазона нужно руководствоваться следующими правилами:
два символа «.» рассматриваются как один символ, поэтому между ними недопустимы пробелы; левая граница диапазона не должна превышать его правую границу.
Тип-диапазон наследует все свойства своего базового типа, но с ограничениями, связанными с его меньшей мощностью. В частности, если определена переменная.
В стандартную библиотеку Object Pascal включены две функции, поддерживающие работу с типами-диапазонами:
High (х) — возвращает максимальное значение типа-диапазона, к которому принадлежит переменная х;
Low (х) — возвращает минимальное значение типа-диапазона.
Вещественные типы В отличие от порядковых типов, значения которых всегда сопоставляются с рядом целых чисел и, следовательно, представляются в ПК абсолютно точно, значения вещественных типов определяют произвольное число лишь с некоторой конечной точностью, зависящей от внутреннего формата вещественного числа.
Таблица 1.4 — Вещественные типы.
Длина, байт. | Название. | Количество значащих цифр | Диапазон значений. |
| Real. Single. Double. Extended. Comp. Currency. |
|
+/-922 337 203 685 477,5807. |
В предыдущих версиях Delphi 1…3 тип Real занимал 6 байт и имел диапазон значений от 2,9*10−39 до 1,7*1038. В версиях 4 и 5 этот тип эквивалентен типу Double. Если требуется (в целях совместимости) использовать 6-байтных Real, нужно указать директиву компилятора {SREALCOMPATIBILITY ON}.
Как видно из табл. 1.4, вещественное число в Object Pascal занимает от 4 до 10 смежных байт и имеет следующую структуру в памяти ПК.
Здесь s — знаковый разряд числа; е — экспоненциальная часть; содержит двоичный порядок; m — мантисса числа.
Мантисса m имеет длину от 23 (для single) до 63 (для Extended) двоичных разрядов, что и обеспечивает точность 7…8 для single и 19…20 для Extended десятичных цифр. Десятичная точка (запятая) подразумевается перед левым (старшим) разрядом мантиссы, но при действиях с числом ее положение сдвигается влево или вправо в соответствии с двоичным порядком числа, хранящимся в экспоненциальной части, поэтому действия над вещественными числами называют арифметикой с плавающей точкой (запятой).
Отметим, что арифметический сопроцессор всегда обрабатывает числа в формате Extended, а три других вещественных типа в этом случае получаются простым усечением результатов до нужных размеров и применяются в основном для экономии памяти.
Особое положение в Object Pascal занимают типы comp и Currency, которые трактуются как вещественные числа с дробными частями фиксированной длины: в comp дробная часть имеет длину 0 разрядов, т. е. просто отсутствует, в currency длина дробной части -4 десятичных разряда. Фактически оба типа определяют большое целое число со знаком, сохраняющее 19…20 значащих десятичных цифр (во внутреннем представлении они занимают 8 смежных байт). В то же время в выражениях comp и currency полностью совместимы с любыми другими вещественными типами: над ними определены все вещественные операции, они могут использоваться как аргументы математических функций и т. д. Наиболее подходящей областью применения этих типов являются бухгалтерские расчеты.