$Q — Тип Delphi
При создании любой серьёзной программы не обойтись без дополнительных, более сложных, чем числа и строки, типов данных. В Delphi программист может для своих целей конструировать собственные типы данных. Чтобы ввести в программу (описать) новый тип данных, применяется оператор с ключевым словом type:
type название_типа = описание_типа;
Перечислимый тип — это тип данных, диапазоном значений которого является просто набор идентификаторов. Это может применяться в тех случаях, когда нужно описать тип данных, значения которого нагляднее представить не числами, а словами. Перечислимый тип записывается взятой в круглые скобки последовательностью идентификаторов — значений этого типа, перечисляемых через запятую. При этом, первые элементы типа считаются младшими по сравнению с идущими следом. Например, тип, описывающий названия футбольных команд, можно сформировать так:
type FootballTeam = (Spartak, Dinamo, CSKA, Torpedo, Lokomotiv);
var MyTeam: FootballTeam;
begin
MyTeam:=Spartak;
end;
Вообще, под перечислимыми типами понимают все типы, для которых можно определить последовательность значений и их старшинство. К ним относятся:
- все целочисленные типы, для которых всегда можно указать число, следующее за числом N;
- символьные типы (Char): за символом ‘a’ всегда следует ‘b’, за ‘0’ следует ‘1’, и так далее;
- логические типы — тип Boolean также представляет собой перечислимый тип: type Boolean = (false, true);
Структурные типы данных используются практически в любой программе. Это такие типы, как
- массивы
- записи
- множества
Массив — это структура данных, доступ к элементам которой осуществляется по номеру (или индексу). Все элементы массива имеют одинаковый тип.
Описание массива имеет вид:
type имя_типа_массива = array [диапазон] of тип_элемента;
Диапазон определяет нижнюю и верхнюю границы массива и, следовательно, количество элементов в нём. При обращении к массиву индекс должен лежать в пределах этого диапазона. Массив из ста элементов целого типа описывается так:
type TMyArray = array [1 .. 100] of Integer;
Теперь можно описать переменные типа TMyArray:
var A, B: TMyArray;
Вместо присвоения типа можно явно описать переменные как массивы:
var A, B : array [1..100] of Integer;
Для доступа к элементу массива нужно указать имя массива и индекс элемента в квадратных скобках. В качестве индекса может выступать число, идентификатор или выражение, значение которых должно укладываться в диапазон, заданный при описании массива:
Иногда требуется узнать верхнюю или нижнюю границу массива. Для этого служат встроенные функции:
High() — вернёт число, являющееся верхней границей массива;
Low() — вернёт число, являющееся нижней границей массива.
В скобки нужно подставить массив, границы которого требуется узнать.
Выражение B := A означает, что каждый элемент массива B будет равен элементу с таким же индексом массива A. Такое присвоение возможно только если оба массива объявлены через некий поименованный тип, или перечислены в одном списке. И в случае:
его использовать невозможно (но возможно поэлементное присвоение B[1] := A[2]; и т.д.).
Массивы могут иметь несколько измерений, перечисляемых через запятую. Например, таблицу из четырёх столбцов и трёх строк:
|
можно описать в виде массива с двумя измерениями:
type MyTable = array[1..4, 1..3] of Integer;
var X : MyTable;
Y : Integer;
begin
Y:=X[3, 2];
end;
Теперь в результате операции присвоения Y будет равен 7.
Многомерный, например, двумерный массив можно описать как массив массивов:
type TMyArray = array [1 .. 4] of array [1 .. 3] of Integer;
Результат будет аналогичен предыдущему примеру.
Каждое измерение многомерного массива может иметь свой собственный тип, не обязательно целый.
Кроме вышеописанных, так называемых статических массивов, у которых количество элементов неизменно, в Delphi можно использовать динамические массивы, количество элементов в которых допускается изменять в зависимости от требований программы. Это позволяет экономить ресурсы компьютера, хотя работа с такими массивами происходит гораздо медленнее. Описываются динамические массивы аналогично статическим, но без указания диапазона индексов:
type TDinArray = array of Integer;
var A : TDinArray;
После создания в динамическом массиве нет ни одного элемента. Необходимый размер задаётся в программе специальной процедурой SetLength. Массив из ста элементов:
Нижняя граница динамического массива всегда равна нулю. Поэтому индекс массива A может изменяться от до 99.
Многомерные динамические массивы описываются именно как массивы массивов. Например, двумерный:
type T3DinArray = array of array of Integer;
var A : T3DinArray;
В программе сначала задаётся размер по первому измерению (количество столбцов):
SetLength(A, 3);
Затем задаётся размер второго измерения для каждого из трёх столбцов, например: SetLength(A[0], 3); |
Диапазоны значений и форматы физических целых типов не зависят от микропроцессора и операционной системы, в которых выполняется программа. Они не меняются (или, по крайней мере, не должны меняться) с изменением реализации или версии Object Pascal. Диапазоны значений логических целых типов (Integer и Cardinal) определяются совершенно иным образом. Как видно из табл. 1.3, они никак не связаны с диапазонами соответствующих физических типов. Обратите внимание, что в Delphi по умолчанию задано 32-разрядное представление. Таблица 1.3. Логические целые типы
Совет: В С и C++ для целых значений определены типы int, short int (или просто short) и long int (или просто long). Тип int из C/C++ соответствует типу Integer из Delphi, a long из C/C++ — Longint из Delphi. Однако Shortint из C/C++ соответствует в Delphi не Shortint, a Smalltlnt. Эквивалент Shortint из Delphi в C/C++— это signed char. Тип unsigned char в C/C++ соответствует типу Byte из Delphi. В C/C++ существует еще тип unsigned long, аналога которому в Delphi нет. Над целыми данными выполняются все операции, определенные для порядковых типов, но с ними все же удобнее работать как с числами, а не с «нечисленными порядковыми типами». Как и «живые» числа, данные целых типов можно складывать (+), вычитать (-) и умножать (*). Однако некоторые операции и функции, применяемые к данным целых типов, имеют несколько иной смысл.
Символьные типы
Совет: Процессор не различает типы char, определенные в C/C++ и Delphi. Однако функционально каждый из этих языков трактует данный тип совершенно по-разному. В C/C++ это целый тип, переменной которого можно присваивать целые значения. Переменной int можно присвоить символьное значение, а переменной char — целое. В Delphi символьные типы жестко отделены от численных. Для присвоения численному значению символьного здесь необходимо воспользоваться функцией Ord. В языке Basic один символ представляется так же, как и строка символов. Функция Chr из Delphi эквивалентна функции CHR$ из Basic. Функция Ord из Delphi, возвращающая код ANSI символьной переменной, подобна функции A3 С из Basic, аргумент которой представляет односимвольную строку. Булевы типы Таблица 1.4. Размеры переменных булевых типов
По аналогии с целыми и символьными типами, подразделяющимися на физические и логические, естественно предположить, что ByteBool, WordBool и LongBool — физические типы, Boolean — логический. Но в данном случае это не совсем так. Все четыре типа различны. Для Object Pascal предпочтителен тип Boolean, остальные определены для совместимости с другими языками программирования и операционными системами. Переменным типа Boolean можно присваивать только значения True (истина) и False (ложь). Переменные ByteBool, WordBool и LongBool могут принимать и другие порядковые значения, интерпретируемые обычно как False в случае нуля и True — при любом ненулевом значении. Совет: Булевы типы в Delphi можно сравнить с типом LOGICAL языка FORTRAN. В Basic, С и C++ булевы типы как таковые отсутствуют. Булевы выражения в этих языках применяются точно так же, как во всех остальных, однако результаты этих выражений интерпретируются не как значения отдельного типа, а как целые числа. Как в Basic, так и в C/C++ булевы выражения дают численные результаты, интерпретируемые как False в случае 0 и True — в случае любого ненулевого значения. Это совместимо с порядковыми значениями булевых выражений в Delphi. В C/C++ простые сравнения дают результат 1 (True) или 0 (False). Это эквивалентно булевым значениям Delphi. Только результат сравнения в Delphi выводится как булевый, а не целый. В большинстве случаев типу Boolean из Delphi соответствует тип char в C/C++. В Basic зарезервированы слова TRUE (эквивалентно константе -1) и FALSE (эквивалентно константе 0). В Basic TRUE меньше FALSE, в Delphi, наоборот, False меньше True. Перечислимые типы Совет: В С и C++ есть тип enema, аналогичный перечислимому типу Delphi. Но в этих языках можно произвольно присваивать идентификаторам постоянные значения. В Delphi же соответствие имен и их значений фиксиро-вано: первому имени присваивается значение 0, каждому последующему — на единицу больше. В С тип enum применяется лишь как средство быстрого определения набора целых постоянных. В C++ объявленные в перечислимом типе идентификаторы можно присваивать только переменным того же типа. Поддиапазонные типы Type subrange type = low value. high value; Поддиапазонные переменные сохраняют все особенности исходного типа. Единственное отличие состоит в том, что переменной поддиапазонного типа можно присваивать только значения, входящие в заданный поддиапазон. Контроль за соблюдением этого условия задается командой проверки диапазона (range checking). Применение перечисляемых типов Delphi.Конечно этот пост не вызовет особого интереса у «акул шоубиза Delphi-кодинга», но блог ведь читают и те кто только пробуют разобраться в Delphi и создать что-то свое. Поэтому, думаю, что для таких людей пост «Применение перечисляемых типов Delphi» поможет сделать их приложения более…профессиональными что-ли :). Итак, что такое RTTI. 2. Ответ сервера также может содержать ограниченное количество значений (кодов) ошибок и 1 значение («Ok») при успешной аутентификации. Следовательно получим ещё один тип данных: Теперь, когда все перечисляемые типы данных определены, возникает простой вопрос «Что дальше?». Как бы мы поступили, например, при формировании строки запроса, если б абсолютно ничего не знали про RTTI и модуль TypInfo в частности? Примерно то же самое и в отношении TServices. Будет ли этот код работать? Конечно будет…куда он нафиг денется. Но ведь можно сделать и по другому. Позволяет получить значение перечисляемого типа в виде простой строки. Первый параметр — указатель на запись TTypeInfo, второй — порядковый номер значения в перечисляемом типе данных. Мы получим сообщение, содержащее строку «HOSTED». Теперь применив этот метод, мы можем сократить код представленный выше всего до одной строки: Или, если Вы используете какой-то шаблон для формирования строки, то так: Типы данных Delphi и работа с нимиК встроенным типам данных в языке Delphi относятся типы целые, действительные, символы, строки, указатели, булевы. Порядковые типы. Порядковыми (ordinal) типами называются те, в которых значения упорядочены, и для каждого из них можно указать предшествующее и последующее значения. Структурные типы. К структурным типам относятся множества, массивы, записи, файлы, классы, интерфейсы. Целые типы данных. В переменных целых типов информация представляется в виде целых чисел, т.е. чисел не имеющих дробной части. Таблица 1 Операции над порядковыми типами Минимальное значение порядкового типа Т Максимальное значение порядкового типа Т Порядковый номер значения выражения порядкового типа. Для целого выражения — просто его значение. Для остальных порядковых типов Ord возвращает физическое представление результата выражения, трактуемое как целое число. Возвращаемое значение всегда принадлежит одному из целых типов Предыдущее по порядку значение. Для целых выражений эквивалентно Х-1 Следующее по порядку значение. Для целых выражений эквивалентно Х+1 Уменьшает значение переменной на 1. Эквивалентно V := Pred(V) Увеличивает значение переменной на 1. Эквивалентно V := Succ(V) 8 битов, беззнаковый 16 битов, беззнаковый 32 бита, беззнаковый Также существует такой тип, как Integer, который эквивалентен типу LongInt. Его диапазон от -2147483648 до 21474836478. Занимает 4 байта в пямяти. Основными являются Integer и Cardinal, так что в большинстве случаев желательно использовать эти типы. Над целыми данными выполняются все операции, определенные для порядковых типов. Операции над целыми типами: Возвращает абсолютное целое значение Х Возвращает целую часть частного деления Х на Y Возвращает остаток частного деления Х на Y Возвращает булево True (истина), если Х — нечетное целое, и False (ложь) — в противном случае Действительные типы данных. В переменных действительных типов содержатся числа, состоящие из целой и дробной частей. Количество значащих цифр Основным, обеспечивающим максимальную производительность, является тип Real, который в настоящий момент эквивалентен типу Double. Таблица 5 Функции действительных типов Абсолютная величина х Косинус х (х выражается в радианах, а не в градусах) Экспоненциальная функция от х Дробная часть х Целая часть х. Несмотря на название, возвращает действительное значение (с плавающей запятой), т.е. просто устанавливает нуль в дробной части Натуральный логарифм от х Ближайшее к х целое значение. Возвращает значение целого типа. Условие «ближайшее к х» не работает, если верхнее и нижнее значения оказываются равноудаленными (например, если дробная часть точно равна 0,5). В этих случаях Delphi перекладывает решение на операционную систему. Обычно процессоры Intel решают эту задачу в соответствии с рекомендацией IEEE округлять в сторону ближайшего четного целого числа. Иногда такой подход называют «банкирским округлением» Квадрат х, т.е. X*X Квадратный корень от х Целая часть х. В отличие от Int, возвращающей Символьные типы данных. Символьные типы предназначены для хранения одного символа. Однобайтовые символы, упорядоченные в соответствии с расширенным набором символов ANSI Символы объемом в слово, упорядоченные в соответствии с международным набором символов UNICODE. Первые 256 символов совпадают с символами ANSI Булевы типы данных. Переменные булевых типов данных представляют логические значения, например, true (истина) и false (ложь). Таблица 7 Размеры переменных булевых типов 2 байт (объем Word) 4 байт (объем Longint) Массив — это структура данных, представляющая собой набор переменных одинакового типа, имеющих общее имя. Массивы удобно использовать для хранения однородной по своей природе информации, например, таблиц и списков. Массив, как и любая переменная программы, перед использованием должен быть объявлен в разделе объявления переменных. В общем виде инструкция объявления массива выгладит следующим образом: Имя: [нижний_индекс..верхний_индекс] of тип где: имя — имя массива; array — зарезервированное слово языка Delphi, обозначающее, что объявляемое имя является именем массива; нижний_индекс и верхний_индекс — целые константы, определяющие диапазон изменения индекса элементов массива и, неявно, количество элементов (размер) массива; 3.2.2. Вещественные типы Delphi3.2.2. Вещественные типы Delphi В Delphi существует четыре вещественных типа: Single , Double , Extended и Real . Их общий формат одинаков (рис. 3.1, а). Знак — это всегда один бит. Он равен нулю для положительных чисел и единице для отрицательных. Что же касается размеров мантиссы и экспоненты, то именно в них и заключается различие между типами. Прежде чем перейти к конкретным цифрам, рассмотрим подробнее тип Real , сделав для этого небольшой экскурс в историю. Real — это стандартный тип языка Паскаль, присутствовавший там изначально. Когда создавался Паскаль, процессоры еще не имели встроенной поддержки вещественных чисел, поэтому все операции с данными типа Real сводились к операциям с целыми числами. Соответственно, размер полей в типе Real был подобран так, чтобы оптимизировать эти операции. а) общий вид вещественного числа б) Двоичное представление числа типа Single Рис. 3.1. Хранение вещественного числа в памяти Микропроцессор Intel 8086/88 и его улучшенные варианты — 80286 и 80386 — также не имели аппаратной поддержки вещественных чисел. Но у систем на базе этих процессоров была возможность подключения так называемого сопроцессора. Эта микросхема работала с памятью через шины основного процессора и обеспечивала аппаратную поддержку вещественных чисел. В системах средней руки гнездо сопроцессора обычно было пустым, т. к. это уменьшало цену (разумеется, вставить туда сопроцессор не было проблемой). Для каждого центрального процессора выпускались свои сопроцессоры, маркировавшиеся Intel 8087, 80287 и 80387 соответственно. Были даже сопроцессоры, выпускаемые другими фирмами. Они работали быстрее, чем сопроцессоры Intel, но появлялись на рынке позже. Тип вещественных чисел, поддерживаемый сопроцессорами, не совпадает с Real . Он определяется стандартом IEEE (Institute of Electrical and Electronics Engineers). Чтобы обеспечить в своих системах поддержку типов IEEE, Borland вводит в Turbo Pascal типы Single , Double и Extended . Extended — это основной для сопроцессора тип, a Single и Double получаются из него очень простым усечением. Система команд сопроцессора допускает работу с этими типами: при загрузке числа типа Single или Double во внутренний регистр сопроцессора последний конвертирует их в Extended . Напротив, при выгрузке чисел этих типов из регистра в память сопроцессор усекает их до нужного размера. Внутренние же операции всегда выполняются с данными типа Extended (впрочем, из этого правила есть исключение, на котором мы остановимся позже, после детального рассмотрения формата различных типов). Single и Double позволяют экономить память. Ни один из них также не совпадает с типом Real . В системах с сопроцессорами новые типы обрабатываются заметно (в 2–3 раза) быстрее, чем Real (это с учетом того, что тип Real после соответствующего преобразования также обрабатывался сопроцессором; если же сравнивать обработку типа Extended на машине с сопроцессором и Real на машине без сопроцессора, то там на отдельных операциях достигалась разница в скорости примерно в 100 раз). Чтобы программы с этими типами можно было выполнять и в системах без сопроцессора, была предусмотрена возможность подключать к ним программный эмулятор сопроцессора. Обработка этих типов эмулятором была медленнее, чем обработка Real . Начиная с 486-й серии Intel берет курс на интеграцию процессора и сопроцессора в одной микросхеме. Процент брака в микросхемах слишком велик, поэтому Intel идет на хитрость: если у микросхемы брак только в сопроцессорной части, то на этом кристалле прожигаются перемычки, блокирующие сопроцессор, и микросхема продается как процессор 80486SX, не имеющий встроенного сопроцессора (в отличие от полноценной версии, которую назвали 80486DX). Бывали и обратные ситуации, когда сопроцессор повреждений не имел, зато процессор был неработоспособен. Такие микросхемы превращали в «сопроцессор 80487». Но это уже из области экзотики, и, по имеющейся у нас информации, до России такой сопроцессор не дошел. Процессор Pentium во всех своих вариантах имел встроенный блок вычислений с плавающей точкой (FPU — Floating Point Unit), и отдельный сопроцессор ему не требовался. Таким образом, с приходом этого процессора тип Real остался только для обратной совместимости, а на передний план вышли типы Single , Double и Extended . Начиная с Delphi 4, тип Real становится синонимом типа Double , а старый 6-байтный тип получает название Real48 . Здесь и далее под словом Real мы будем понимать старый 6-байтный тип. Существует директива компилятора <$REALCOMPATIBILITY ON/OFF>, при включении которой (по умолчанию она отключена) Real становится синонимом Real48 , а не Double . Размеры полей для различных вещественных типов указаны в табл. 3.1. Таблица 3.1. Размеры полей в вещественных типах
Другие параметры вещественных типов, такие как диапазон и точность, можно найти в справке Delphi. Использование функциональных типов |
23.02.2015, 17:43 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Использование подпрограмм для обработки простых типов данных Использование функциональных классов Использование функциональных клавиш для завершения программы Использование шаблона типов Использование параметризованных типов $Q — Тип DelphiВ этом уроке мы рассмотрим одну из ключевых возможностей языков программирования — создание собственных типов данных. Для примера того, как нужно объявлять типы данных, давайте создадим самый простейший тип. Он будет представлять дубликат какого-либо другого типа. Укажем его сразу после объявления типа TForm1, т.е. после ключевого слова end, который указывает на завершение описания этого типа. Создается наш собственный тип вот таким образом: TMyArray = array [1..100] of integer;[/cc] Записями record называют более сложные типы, которые могут включать в себя некоторое количество полей. Полями мы будем называть переменные, которые будут входить в состав записи. Создадим запись TBook, в которой опишем какие-либо характеристики, связанные с книгой: Перечисляемые типы достаточно просты. Они представляют собой типы таких переменных, которым могут быть присвоены только определенные значения. Например, объявим перечисляемый тип TOperatingSystem: Delphi.Generics typesВ данном посте разбираюсь с обобщенными типами данных, руководствуясь книгой Д. Осипова “Delphi. Программирование для Windows. OS X, iOS и Android”. Цель – отработать на практике возможности обобщенных типов. Зачем нужны обобщенные типы?Насколько я понял, в том числе для того, чтобы можно было использовать один и тот же алгоритм для разных типов данных. Скажем, есть у нас алгоритм сравнения или сортировки или сложения или ещё чего угодно, но, например, написан он для целочисленных значений. Допустим, он корректно работает и с другими типами данных. Раньше надо было бы его переписывать на другие типы данных, а сейчас достаточно указать в обобщенном типе данных, что тип данных в данном конкретном случае будет другой. Типы данныхЛюбые данные, т.е. константы, переменные, свойства, значения функции или выражения, в Object Pascal характеризуются своими типами. Тип определяет множество допустимых значений, которые может иметь тот или иной объект, а также множество допустимых операций, которые применимы к нему. Кроме того, тип определяет также и формат внутреннего представления данных в памяти ПК. Возвращает абсолютное целое значение Х Возвращает целую часть частного деления Х на Y Возвращает остаток частного деления Х на Y Возвращает булево True (истина), если Х — нечетное целое, и False (ложь) — в противном случае Возвращает целый квадрат Х (т.е. Х*Х) Согласно принятому в Delphi соглашению, имена типов должны начинаться с латинской буквы Т (от слова Туре-тип). После объявления типа можно объявить переменную, относящуюся к этому типу в разделе Var. Переменные любого перечисляемого типа можно объявлять и без предварительного описания этого типа, например: Var TCol: (black, red, green); Тип-диапазон (или интервальный тип). Это один из типов данных, определяемых программистом. Операции над порядковыми типами Функции действительных типов Абсолютная величина х Косинус х (х выражается в радианах, а не в градусах) Экспоненциальная функция от х Дробная часть х Целая часть х. Несмотря на название, возвращает действительное значение (с плавающей запятой), т.е. просто устанавливает нуль в дробной части Натуральный логарифм от х Ближайшее к х целое значение. Возвращает значение целого типа. Условие «ближайшее к х» не работает, если верхнее и нижнее значения оказываются равноудаленными (например, если дробная часть точно равна 0,5). В этих случаях Delphi перекладывает решение на операционную систему. Обычно процессоры Intel решают эту задачу в соответствии с рекомендацией IEEE округлять в сторону ближайшего четного целого числа. Иногда такой подход называют «банкирским округлением» Квадрат х, т.е. X*X Квадратный корень от х Целая часть х. В отличие от Int, возвращающей действительное значение, Trunc возвращает целое Для работы с датой и временем используются следующие функции: Function Date: TdateTime; Возвращает текущую дату Преобразует дату в строку символов Преобразует дату и время в строку символов Function Time: TdateTime; Возвращает текущее время Преобразует время в строку В тексте программы последовательность символов, являющаяся строкой, заключается в ординарные кавычки. Если длина сцепленной строки превысит максимально допустимую длину N, то «лишние » символы отбрасываются. Встроенные строковые функции и процедуры: Function Concat(sl, s2, s3: String): String; Возвращает последовательное соединение строк. Эквивалентна оператору si + s2 + s3 Function Copy(s: String, pos, len: Integer): String; Возвращает подстроку длиной максимум len символов, начинающуюся в позиции pos строки s Procedure Delete(s: String, pos, len: Integer); Удаляет максимум len символов из строки s, начиная с позиции pos Procedure Insert(sourse:String, target, pos: Integer); Вставляет строку source в строковую переменную target, начиная с позиции pos Function Length (s:String): Integer; Возвращает динамическую длину строки Function Pos(substring, s: String): Integer; Возвращает место первого вхождения подстроки substring в строку s Стандартные функции и процедуры преобразования строк в другие типы: Functoin StrToDate(st: String): TdateTime; Преобразует символы строки в дату Functoin StrToDateTime (st: String): TdateTime; Преобразует символы строки в дату и время Functoin StrToFloat(st: Sting): Extended; Преобразует символы строки в вещественное число Functoin StrToInt(st: String): Integer; Преобразует символы строки в в целое число Functoin StrToInt(St: String; Default: Integer); Преобразует символы строки St в целое число. Если строка не содержит правильного представления целого числа, возвращается значение Default Functoin StrToTime (st: String): TdateTime; Преобразует символы строки st во время. Строка должна содержать два-три числа, разделенных символом «:» (двоеточие) Procedure Val(St: String; var x; Code: Integer; Преобразует строку символов во внутреннее представление целой или вещественной переменной X, которое определяется типом этой переменной Стандартные функции и процедуры обратного преобразования: Function DateToStr(Value: TDateTime): String; Преобразует дату из параметра Value в строку символов Function DateTimeToStr (Value:TDateTime): String; Преобразует дату и время из параметра Value в строку символов Procedure DateTimeToString(var St: String; Format: String; Value: TDateTime); Преобразует дату и время из параметра Value в строку St в соответствии со спецификаторами даты/времени параметра Format Function FloatToStr(Value: Extended): String; Преобразует вещественное значение Value в строку символов Function lntToStr(Value: Integer): String; Преобразует целое значение Value в строку символов Function TimeToStr(Value: TDateTime):String; Преобразует время из параметра Value в строку символов Procedure Str(X[: Width[: Decimals]]; var St:String); Преобразует число X любого вещественного или целого типа в строку символов St; параметры Width и Decimals, если они присутствуют, задают формат преобразования. (Width — ширина поля, Decimals — количество символов в дробной части) Массивом называется упорядоченная индексированная совокупность однотипных элементов, имеющих общее имя. Таким образом, каждый элемент массива однозначно определяется именем массива и индексом (номером этого элемента в массиве) или индексами, если массив многомерный. Для обращения к отдельному элементу массива указываются имя этого массива и индекс (индексы) элемента, заключенный в квадратные скобки. Различают массивы статические и динамические. Статический массив представляет собой массив, границы индексов и, соответственно, размеры которого задаются при объявлении, т.е. они известны еще до компиляции программы. Формат описания типа статистического массива: Типы данных DelphiЯзык Delphi поддерживает семь целых типов данных, описание которых приведено в табл. 3. Таблица 3. Целые типы
Язык Delphi поддерживает и наиболее универсальный целый тип — Integer, который эквивалентен Longint. Язык Delphi поддерживает шесть вещественных типов. Типы различаются между собой диапазоном допустимых значений, количеством значащих цифр и количеством байтов, необходимых для хранения данных в памяти компьютера (табл. 4). Таблица 4. Вещественные (дробные) типы
Язык Delphi поддерживает и наиболее универсальный вещественный тип – Real, который эквивалентен Double. Язык Delphi поддерживает два символьных типа: Ansichar и Widechar: · тип Ansichar — это символы в кодировке ANSI, которым соответствуют числа в диапазоне от 0 до 255; · тип widechar — это символы в кодировке Unicode, им соответствуют числа от 0 до 65535. Язык Delphi поддерживает и наиболее универсальный символьный тип –Char, который эквивалентен Ansichar. Язык Delphi поддерживает три строковых типа: Shortstring, Longstring и WideString: · тип Shortstring представляет собой статически размещаемые в памяти компьютера строки длиной от 0 до 255 символов; · тип Longstring представляет собой динамически размещаемые в памяти строки, длина которых ограничена только объемом свободной памяти; · тип WideString представляет собой динамически размещаемые в памяти строки, длина которых ограничена только объемом свободной памяти. Каждый символ строки типа WideString является Unicode-символом. В языке Delphi для обозначения строкового типа допускается использование идентификатора String. Тип String эквивалентен типу Shortstring. Логическая величина может принимать одно из двух значений True (истина) или False (ложь). В языке Delphi логические величины относят к типу Boolean. |