Типы данных в Delphi
СОДЕРЖАНИЕ
Введение
1 Простые
типы данных
- Порядковые
4 - Вещественный
5 - Структурные
типы данных
8
2.1 Записи
2.2 Массивы
2.3 Множества
2.4 Файловый тип
Вывод
Список
использованных источников
ВВЕДЕНИЕ
С помощью типов данных программист указывает компилятору, как хранить информацию в программе. При объявлении переменной необходимо указать ее тип. Одни типы уже определены в языке, другие программисту приходится задавать самому. В ранних языках программирования допускалось ограниченное число типов данных, и Pascal оказался одним из первых языков, допускающих определение в программе новых типов.
Типы данных, определяемые пользователем, обычно задаются в разделе определения типов программы или модуля (unit), однако это можно делать и внутри процедур или функции. Объявления типов действуют в пределах того блока, в котором они размещены. Вне этого блока ссылаться на такие типы нельзя. Внутри же они заменяют все внешние типы с тем же именем. Объявленные типы данных можно применять в любом месте области их видимости; запрещена только ссылка определяемого типа на самого себя (тут, однако, есть одно исключение, касающееся указателей).
Объявления
типов в Pascal являются для компилятора
чем-то вроде схем, которые он должен запомнить
на случай, если вдруг встретит в программе
ссылки на тот или иной тип. Само по себе
объявление типа не вносит в программу
никаких изменений.
1. Простые типы данных
Любой
реально существующий тип данных,
каким бы сложным он ни казался
на первый взгляд, представляет собой
простые составляющие, которыми процессор
может манипулировать. В Object Pascal
эти простые типы данных разбиты на две
группы: порядковые, представляющие данные
разных объемов, которыми процессор может
легко манипулировать, и действительные,
представляющие приближенно математические
действительные числа. Разделение типов
на порядковые и действительные несколько
условно. Точно так же простые данные можно
было бы разделить на числа и не числа.
Однако в языке Object Pascal порядковые и действительные
данные трактуются по-разному, и такое
разделение даже полезно.
1.1 Порядковые:
Из простых
типов данных порядковые - самые
простые. В этих типах информация
представляется в виде отдельных
элементов. Связь между отдельными
элементами и их представлением в
памяти определяет естественные отношения
порядка между этими
В Object Pascal определены три группы порядковых типов и два типа, определяемых пользователем. Группы - это целые, символьные и булевы типы. Порядковые типы, задаваемые пользователем, - это перечисления и поддиапазоны.
Все значения любого порядкового типа образуют упорядоченную последовательность, и значение переменной порядкового типа определяется его местом в этой последовательности. За исключением переменных целых типов, значения которых могут быть как положительными, так и отрицательными, первый элемент любого порядкового типа имеет номер 0, второй элемент - номер 1 и т.д. Порядковый номер целого значения равен самому значению. Отношение порядка определяет общие для данных всех порядковых типов операции. Некоторые стандартные функции такого вида встроены в Object Pascal. Они представлены в таблице 1.1.
Для всех порядковых типов в Object Pascal существует операция задания типа для
преобразования
целых значений в значения
соответствующих порядковых
Таблица 1.1. Операции над порядковыми типами
| Операция | Описания |
| Low (T) | Минимальное значение порядкового типа Т |
| High(T) | Максимальное значение порядкового типа Т |
| Ord(X) | Порядковый номер значения выражения порядкового типа. Для целого выражения - просто его значение. Для остальных порядковых типов Ord возвращает физическое представление результата выражения, трактуемое как целое число. Возвращаемое значение всегда принадлежит одному из целых типов |
| Pred(X) | Предыдущее
по порядку значение. Для целых
выражений
эквивалентно Х-1 |
| Succ(X) | Следующее по порядку значение. Для целых выражений эквивалентно Х+1 |
| Dec(V) | Уменьшает значение переменной на 1. Эквивалентно V := Pred(V) |
| Inc(V) | Увеличивает значение переменной на 1. Эквивалентно V := Succ(V) |
1.2 Действительные типы:
В переменных действительных типов содержатся числа, состоящие из целой и дробной частей. В Object Pascal определено шесть действительных типов. Все типы могут представлять число 0, однако они различаются пороговым (минимальным положительным) и максимальным значениями, которые могут представлять, а также точностью (количеством значащих цифр) и объемом. Действительные типы описываются в таблице 1.2.
Таблица 1.2 Вещественные типы
| Тип | Порог | Максимальное значение | Количество значащих цифр | Объем (байт) |
| Real | 2.9E-39 | 1.7Е38 | 11-12 | 6 |
| Single | 1.5E-45 | 3.4Е38 | 7-8 | 4 |
| Double | 5.0E-324 | 1.7Е308 | 15-16 | 8 |
| Extended | 3.4E-4932 | 1.IE4932 | 19-20 | 10 |
| Comp | 1.0 | 9.2Е18 | 19-20 | 8 |
| Currency | 0.0001 | 9.2Е14 | 19-20 | 8 |
Целые типы представляют целые числа, т.е. числа, дробная часть которых равна нулю. Разница между двумя неодинаковыми целыми числами не может быть меньше единицы. Именно благодаря этому целые числа применяются для обозначения дискретных величин, независимо от того, имеют ли реальные объекты какое-либо отношение к числам. Действительные типы предназначены для представления чисел, которые могут иметь дробную часть, поэтому они полезны для представления величин, которые могут быть довольно близкими, почти непрерывными.
Заметьте, именно почти. Несмотря на название действительные, переменные этих типов отличаются от математических действительных чисел. В Object Pascal действительный тип - это подмножество математических действительных чисел, которые можно представить в формате с плавающей запятой и фиксированным числом цифр. Для невнимательных программистов ситуация усугубляется тем, что в стандартных форматах IEEE (Institute of Electrical and Electronic Engi-neers - Институт инженеров- электриков и электронщиков), применяемых в программах Delphi и вообще в большинстве программ для Windows, возможно точное представление только чисел с фиксированным числом бит в дробной части. Удивительно, но такое простое число, как 0,1, записывается в расширенном формате IEEE с некоторой погрешностью, пусть очень небольшой. Из-за этого представление с плавающей запятой оказывается несколько неудобным для программ, в которых сохраняется и выводится фиксированное число десятичных разрядов численных значений. Это относится и к программам, работающим с ''живыми" деньгами.
Для частичного решения этой проблемы в Object Pascal определены два формата с фиксированной запятой. Тип Comp (computational - вычислительный) содержит только целые числа в диапазоне от -+1 до -1, что примерно соответствует диапазону от -9,2× до 9,2×. При программировании операций с американской валютой разработчикам обычно приходится искать естественный способ записи денежных сумм, в котором целая часть числа определяет количество долларов, дробная - центов. Если такие значения записывать в переменные типа
Comp, придется представлять их в виде целого числа центов. В этом случае следует умножать значение на 100 для обращения центов в доллары, а затем делить на 100, чтобы снова получить центы.
Этих
забот можно избежать, если воспользоваться
типом Currency. В этом случае задачу выбора
масштаба возьмет на себя компилятор.
Физически значения Currency записываются
в память того же объема, что и Comp, как целые
числа, однако компилятор не забывает
вовремя разделить значение на 10 000 (не
на 100!) для его приведения в соответствие
с денежным знаком и умножить на 10 000 перед
записью в память. Это обеспечивает абсолютную
точность в четыре десятичных знака после
запятой.
2. Структурные типы
На элементарном уровне наиболее полезными типами данных являются те, в которых содержится численная и строковая (символьная) информация. Объединив несколько образцов этих элементарных типов, можно создавать более сложные типы данных.
Структурные типы данных предоставляют возможность создавать новые типы, расширяя определения уже существующих таким образом, чтобы данные новых типов могли содержать более одного значения. Элементами данных структурных типов можно манипулировать как поодиночке, так и вместе, и эти элементы сами могут быть структурными. Никаких ограничений на подобное вложение одной структуры в другую не существует.
Ниже перечислены структурные типы, определенные в Delphi.
- Записи
- Массивы
- Множества
- Файлы
Перечисленные типы сами по
себе обычно являются не
- Записи
С помощью зарезервированного слова record (запись) в одном типе можно объединять данные разных типов.
Фиксированные записи
В фиксированной части записи
определяется одно или
record
fieldnamel: fieldtypel;
fieldname2, fieldname3: fieldtype2;
end;
Имея доступ к информации в записи, можно обрабатывать всю запись целиком (все поля одновременно) или только отдельное поле. Для обращения к отдельному полю наберите имя записи, точку и идентификатор поля, например
MyRec.Fieldnamel
Для доступа ко всей записи просто укажите ее имя.
Вариантные записи
Вариантная часть типа record дает возможность по-разному трактовать область памяти, совместно занимаемую вариантами поля:
record
case optional tagfield: required ordinal type of
1: variantnamel: varianttype3;
2, 3: variantname2: varianttype4;
end;
Все варианты занимают в памяти одно место. Каждый вариант обозначается некоторой постоянной. При желании можно получать доступ ко всем полям всех вариантов одновременно, однако это может иметь смысл только в наиболее простых случаях, когда точно известно, как именно информация каждого варианта записывается в память.
Каждый вариант обозначается минимум одной константой. Все константы должны быть порядковыми и совместимыми по типу с меткой поля.
Необязательное
поле — это идентификатор
Необязательное поле можно не указывать, однако порядковый тип необходим. При отсутствии необязательного поля программе придется выбирать подходящий вариант каким-то иным образом.
Данные некоторых типов бессмысленно интерпретировать различным образом, и в Object Pascal на некоторые критические типы наложено соответствующее ограничение. Как следствие, в вариантную часть записи нельзя включать длинные строки и переменные типа Variant, а также структурные переменные, содержащие
эти типы.
- Массивы
Массивы могут быть одно- или многомерными, как в следующем примере.
array [ordinal_type] of type_definition;
array [ordinal typel, ordinal type2] of type definition;
Каждый массив содержит некоторое количество элементов информации одного типа. Для обращения к элементу массива надо указать имя массива и индекс элемента, заключенный в квадратные скобки. Обратите внимание, что число элементов массива в каждом измерении задается порядковым типом (ordinal_type). Для этого можно воспользоваться идентификатором некоторого типа (например, Boolean или AnsiChar), однако на практике обычно явно задается поддиапазон целых.
Количество
элементов массива равно
Для обращения к элементу массива укажите имя этого массива и индекс элемента в квадратных скобках. Пусть, например, массив определен следующим образом:
var MyArray: Array [1..10] of Integer;
Тогда
обращение к его третьему элементу
будет выглядеть, как MyArray[З], и выполняться,
как к переменной Integer.
2.3 Множества
Зарезервированное слово set (множество) определяет множество не более чем из 256 порядковых значений:
Set of ordinal type
Минимальный
и максимальный порядковые номера исходного
типа (на основе которого определяется
множественный тип) должны быть в
пределах между 0 и 255. Переменная множественного
типа содержит (или не содержит) любое
значение исходного порядкового
типа. Каждое значение из заданного
диапазона может принадлежать или
не принадлежать множеству. Рассмотрим
следующий
пример.
Type CharSet = set of AnsiChar; // Тип множества символов. ANSI.
var MyAlphaSet: CharSet; // Переменная типа CharSet.
Переменная set может содержать все элементы множества или не содержать ни одного. При присвоении значения переменной множественного типа элементы множества (порядковые значения) указываются в квадратных скобках:
MyAlphaSet := ['А', 'Е', 'Г, 'О', 'U', 'Y']; // Все прописные гласные.
Пустые
квадратные скобки задают пустое множество,
не содержащее ни одного элемента. Это
относится ко всем множественными типам.
2.4 Файловый тип
Тип file предназначен для доступа к линейной последовательности элементов, которые могут представлять данные любого типа, кроме содержащих типы file и class. Объявление файлового типа подобно объявлению массива, только без указания числа элементов.
file of Typel // Файл определенного типа, содержащий
// записи фиксированной длины.
file // Файл без типа или "блочный".
textfile // Файл с записями переменной длины, разделенными символами CR
//и LF ("возврат каретки" и "новая строка").
Механизм ввода-вывода информации как никакой другой аспект программирования зависит от языка и реализации. В большинстве случаев предполагается, что программисту незачем вникать во внутреннюю структуру переменных, управляющих вводом-выводом, и при передаче информации следует полностью полагаться на предназначенные для этого процедуры. Их реализация должна оставаться чем-то наподобие черной магии. В Basic файлы обозначаются числовыми значениями — дескрипторами. В C/C++ программисты манипулируют указателями на структуру FILE. И только в Delphi файловая структура — это переменная.
ВЫВОД
В среде разработки Delphi можно создавать приложения для работы с самыми разными базами данных. Такая универсальность подразумевает необходимость применения средств, которые бы обеспечили возможность работы со многими типами данных, используемыми в этих базах данных.
Естественно, что существует большая группа типов данных, конкретная реализация которых практически не отличается от платформы к платформе. Это, например, строки, символы, целые и вещественные числа и т. д.
Есть типы данных, которые реализованы далеко не на каждой платформе. Есть, наконец, просто уникальные типы данных.
Тип данных однозначно связан с конкретным полем таблицы базы данных. Без этого поля само понятие типа данных не имеет практического смысла.
Синтаксис
Object Pascal позволяет одновременно конструировать
исключительно сложные типы и определение
переменных. Однако определение типов
в разделах type тех или иных блоков дает
возможность использовать эти типы в разных
частях программы. Новые типы определяются
из типов следующих категории.
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ
1 Бобровский С.И. Delphi. Учебный курс/С.И.Бобровский.- Санкт - Петербург: ПИТЕР, 2004-736.
2 Хомоненко
А. Delphi. Наиболее полное руководство/ А.Хомоненко,
В.Гофман, Е.Мещеряков, В.Никифоров.- Санкт
– Петербург: BHV, 2006- 1216.

- Типы данных в СУБД
- Типы данных мультимедиа-информации и средства их обработки
- Типы двигателей, применяемых на автомобилях, конструктивные особенности, перспективы развития в автомобилестроении
- Типы девиантного поведения
- Типы девиантного поведения
- Типы деловых разговоров
- Типы денежно-кредитной политики
- Типы государств
- Типы государства: формационный и цивилизационный подходы
- Типы государства: формационный и цивилизационный подходы
- Типы государств. Понятие и признаки правового государства
- Типы государств по отношению к реглигии
- Типы государств по форме правления
- Типы грамматических форм слова