Delphi имеет более мощный объектный синтаксис, чем Pascal, но поддерживает и старый (compile).
Delphi (как и Pascal) является языком строгой типизации. Это значит, что переменным, объявленным с конкретным типом, должны присваиваться значения того же типа.
Типы данных:
-Integer
-Real
-Boolean
-Char
-String
-Pointer
-PChar
Integer – служит для обозначения порядковой численной величины (целые числа). Имеет длину 2 байта. Диапазон значений -2 147 483 648…+2 147 483 647.
Другие целочисленные типы:
-ShortInt: -128…+127 (1 байт)
-SmallInt: -32 768…+32 767 (2 байта)
-LongInt: -2 147 483 648…+2 147 483 647 (4 байта)
-Int64: -263... +263-1 (8 байт)
-Byte: 0…255 (1 байт)
-Word: 0…65 535 (2 байта)
-LongWord: 0…+4 294 967 295 (4 байта).
Real – хранит вещественные, действительные числа (числа должны иметь определенную точность: 1,844).
-Real48: -2,9*10-39…1,7*1038 (6 байт)
-Single: -1,5*10-45…3,4*1038 (4 байта)
-Double: -5*10-324…1,7*10308 (8 байт)
-Extended: -3,4*10-4932…1,1*104932 (10 байт)
-Comp: -263+1…263-1 (8 байт)
-Currency: финансовый.
Boolean – 0 или 1 (ложь или истина) – 1 байт.
-ByteBool – (1 байт) - хранит значения со знаком (не обязательно 1 или 0).
-WordBool – (2 байта) - хранит значения со знаком (не обязательно 1 или 0).
-LongBool – (4 байта) - хранит значения со знаком (не обязательно 1 или 0).
При несоответствии типов булевых переменных в случае взаимодействия с другими приложениями можно попытаться увеличить размер логической переменной.
Char – одиночные символы ‘A’.
String – текст ‘текст’.
-ShortString – по 255 символов (память выделяется автоматически).
-AnsiString – 231 символов (2 Гбайта).
Пустая строка – ‘’.
PChar - cтроки с нулём в конце. Введены для совместимости с Windows и кодом ,написанным на С/С++.
Строки фиксированной длинны – string[50].
Типы могут автоматически преобразовываться (но не всегда).
Var
ival: longint;
pval: pointer;
begin
ival:=pval; → ошибка
end;
Var
ival: longint;
pval: pointer;
begin
ival:=longint (pval);
end;
Переменная типа ‘pointer’ привязана к типу longint.
Приведение типов может привести к нежелательному округлению и даже к потере данных:
Var
bval: byte;
begin
bval:=byte (255+1);
end;
Без приведения типов, компиляция будет давать ошибку. С приведением, программа компилируется, но значение bval = Ø, т.к. данные предполагается разместить в одном байте, поэтому значимый бит теряется.
Приведение типа может осуществляться как для переменной, так и для значения (результата).
Собственные типы данных.
Для описания нового типа данных:
type название_типа = описание_типа;
Типы:
-Перечисляемый.
Описывается взятой в круглые скобки последовательностью значений этого типа:
type САПР = (ACAD, OrCAD, SolidWorks, PCAD);
-Поддиапазоны.
Наименьшее значение .. наибольшее значение.
type Distance = 0..100;
Var length: Distance;
Begin
Length:= 5; - Ok
Length:= 101; - Ошибка
Кроме числовых диапазонов можно использовать символьные, а также поддиапазоны уже определённых перечисленных типов:
type Str = ‘a’ .. ‘n’;
type SAPR = ACAD..SolidWorks;
-Структурные типы данных.
Массивы.
Доступ к элементам осуществляется по номеру (индексу). Элементы массива одного типа, индекс может вычисляться.
type имя_типа_пользователя = array[диапазон] of тип_элемента;
type TPoz = array[1..10] of integer
Переменную можно декларировать явно как массив:
Var TPoz: array[1..10] of integer;
Но тогда при внешнем одинаковом описании переменных они будут считаться разного типа. В этом случае:
Var T1: array[1..10] of integer;
T2: array[1..10] of integer;
Begin
T1:= T2 → неправильно.
Type Ttype = array[1..10] of integer;
Var T1: Ttype;
T2: Ttype;
Begin
T1:= T2; → правильно.
Записи.
Запись – это структура данных, доступ к элементам которой осуществляется по имени (названию) элемента. Элементы записи могут иметь разный тип:
type название_типа_записи =
record
название_элемента: тип_элемента;
…………………….
end;
Пример:
type PriborRecord =
record
Naimen: String;
Ves: Real;
God: 1950..2003;
end;
Для обращения к элементу записи сначала указывается имя переменной, затем точка и название элемента:
Var Prib: ProborRecord;
begin
Prib.ves:= 1.65;
Prib.God:= 1998;
…………….
Чтоьы не упоминать каждый раз имя переменной (основное внимание - всё равно элементу) – используется ключевое слово with:
with Prib do
begin
Ves:= 1.65;
God:= 1998;
end;
Множества.
Множество напоминает перечисленный тип, но элементы в нем не упорядочены.
Описание:
type тип_множества = set of диапазон_значений_множества
Число элементов множества - не более 256.
type MySet – set of 0..255;
type MySet – set of Byte;
Конкретные значения множества задаются перечислением списка значений:
MySet:= [1,2,5,18,21..48];
Над множествами производятся операции:
+ (объединение): [1,2,3] + [3,4,5] равно [1,2,3,4,5]
– (разность): [1,2,3] – [3,4,5] равно [1,2]
* (пересечение): [1,2,3] * [3,4,5] равно [3]
Указатели.
Служат для повышения эффективности программ. В переменной указателя храниться не значение конкретного типа, а адрес памяти, по которому храниться это значение.
Var BytePtr: ^byte; т.е. переменная BytePtr хранит не данные, а указатель.
Чтобы присвоить ей адрес конкретного места памяти, используется операция @:
Var BytePtr: ^byte;
ByteVal: byte;
begin
ByteVal:= 255;
BytePtr:= @ByteVal;
Чтобы получить содержимое нужной ячейки памяти:
N:= BytePtr^; ^ - после
BytePtr^:= 50;
С указателями можно производить операции, результатом которых будет сдвиг адреса памяти.
Варианты.
Тип Variant применяется для поддержки межпрограммного обмена данными, которые организованы по-разному в различных приложениях.
Var V: Variant;
begin
V:= 1;
V:= 2.3;
V:= true;
V:= ‘строка’
или:
Var R: real;
V: variant;
begin
V:= ‘9,55’;
R:= V*1.14
Данные типов Pointer и Variant надо применять только там, где без этого не обойтись (обращение к внешним программам, запущенным в сети).
Возможно описание сложных структур данных на основе произвольного комбинирования существующих структур данных и создание новых типов на основе определенных ранее.
Delphi (как и Pascal) является языком строгой типизации. Это значит, что переменным, объявленным с конкретным типом, должны присваиваться значения того же типа.
Типы данных:
-Integer
-Real
-Boolean
-Char
-String
-Pointer
-PChar
Integer – служит для обозначения порядковой численной величины (целые числа). Имеет длину 2 байта. Диапазон значений -2 147 483 648…+2 147 483 647.
Другие целочисленные типы:
-ShortInt: -128…+127 (1 байт)
-SmallInt: -32 768…+32 767 (2 байта)
-LongInt: -2 147 483 648…+2 147 483 647 (4 байта)
-Int64: -263... +263-1 (8 байт)
-Byte: 0…255 (1 байт)
-Word: 0…65 535 (2 байта)
-LongWord: 0…+4 294 967 295 (4 байта).
Real – хранит вещественные, действительные числа (числа должны иметь определенную точность: 1,844).
-Real48: -2,9*10-39…1,7*1038 (6 байт)
-Single: -1,5*10-45…3,4*1038 (4 байта)
-Double: -5*10-324…1,7*10308 (8 байт)
-Extended: -3,4*10-4932…1,1*104932 (10 байт)
-Comp: -263+1…263-1 (8 байт)
-Currency: финансовый.
Boolean – 0 или 1 (ложь или истина) – 1 байт.
-ByteBool – (1 байт) - хранит значения со знаком (не обязательно 1 или 0).
-WordBool – (2 байта) - хранит значения со знаком (не обязательно 1 или 0).
-LongBool – (4 байта) - хранит значения со знаком (не обязательно 1 или 0).
При несоответствии типов булевых переменных в случае взаимодействия с другими приложениями можно попытаться увеличить размер логической переменной.
Char – одиночные символы ‘A’.
String – текст ‘текст’.
-ShortString – по 255 символов (память выделяется автоматически).
-AnsiString – 231 символов (2 Гбайта).
Пустая строка – ‘’.
PChar - cтроки с нулём в конце. Введены для совместимости с Windows и кодом ,написанным на С/С++.
Строки фиксированной длинны – string[50].
Типы могут автоматически преобразовываться (но не всегда).
Var
ival: longint;
pval: pointer;
begin
ival:=pval; → ошибка
end;
Var
ival: longint;
pval: pointer;
begin
ival:=longint (pval);
end;
Переменная типа ‘pointer’ привязана к типу longint.
Приведение типов может привести к нежелательному округлению и даже к потере данных:
Var
bval: byte;
begin
bval:=byte (255+1);
end;
Без приведения типов, компиляция будет давать ошибку. С приведением, программа компилируется, но значение bval = Ø, т.к. данные предполагается разместить в одном байте, поэтому значимый бит теряется.
Приведение типа может осуществляться как для переменной, так и для значения (результата).
Собственные типы данных.
Для описания нового типа данных:
type название_типа = описание_типа;
Типы:
-Перечисляемый.
Описывается взятой в круглые скобки последовательностью значений этого типа:
type САПР = (ACAD, OrCAD, SolidWorks, PCAD);
-Поддиапазоны.
Наименьшее значение .. наибольшее значение.
type Distance = 0..100;
Var length: Distance;
Begin
Length:= 5; - Ok
Length:= 101; - Ошибка
Кроме числовых диапазонов можно использовать символьные, а также поддиапазоны уже определённых перечисленных типов:
type Str = ‘a’ .. ‘n’;
type SAPR = ACAD..SolidWorks;
-Структурные типы данных.
Массивы.
Доступ к элементам осуществляется по номеру (индексу). Элементы массива одного типа, индекс может вычисляться.
type имя_типа_пользователя = array[диапазон] of тип_элемента;
type TPoz = array[1..10] of integer
Переменную можно декларировать явно как массив:
Var TPoz: array[1..10] of integer;
Но тогда при внешнем одинаковом описании переменных они будут считаться разного типа. В этом случае:
Var T1: array[1..10] of integer;
T2: array[1..10] of integer;
Begin
T1:= T2 → неправильно.
Type Ttype = array[1..10] of integer;
Var T1: Ttype;
T2: Ttype;
Begin
T1:= T2; → правильно.
Записи.
Запись – это структура данных, доступ к элементам которой осуществляется по имени (названию) элемента. Элементы записи могут иметь разный тип:
type название_типа_записи =
record
название_элемента: тип_элемента;
…………………….
end;
Пример:
type PriborRecord =
record
Naimen: String;
Ves: Real;
God: 1950..2003;
end;
Для обращения к элементу записи сначала указывается имя переменной, затем точка и название элемента:
Var Prib: ProborRecord;
begin
Prib.ves:= 1.65;
Prib.God:= 1998;
…………….
Чтоьы не упоминать каждый раз имя переменной (основное внимание - всё равно элементу) – используется ключевое слово with:
with Prib do
begin
Ves:= 1.65;
God:= 1998;
end;
Множества.
Множество напоминает перечисленный тип, но элементы в нем не упорядочены.
Описание:
type тип_множества = set of диапазон_значений_множества
Число элементов множества - не более 256.
type MySet – set of 0..255;
type MySet – set of Byte;
Конкретные значения множества задаются перечислением списка значений:
MySet:= [1,2,5,18,21..48];
Над множествами производятся операции:
+ (объединение): [1,2,3] + [3,4,5] равно [1,2,3,4,5]
– (разность): [1,2,3] – [3,4,5] равно [1,2]
* (пересечение): [1,2,3] * [3,4,5] равно [3]
Указатели.
Служат для повышения эффективности программ. В переменной указателя храниться не значение конкретного типа, а адрес памяти, по которому храниться это значение.
Var BytePtr: ^byte; т.е. переменная BytePtr хранит не данные, а указатель.
Чтобы присвоить ей адрес конкретного места памяти, используется операция @:
Var BytePtr: ^byte;
ByteVal: byte;
begin
ByteVal:= 255;
BytePtr:= @ByteVal;
Чтобы получить содержимое нужной ячейки памяти:
N:= BytePtr^; ^ - после
BytePtr^:= 50;
С указателями можно производить операции, результатом которых будет сдвиг адреса памяти.
Варианты.
Тип Variant применяется для поддержки межпрограммного обмена данными, которые организованы по-разному в различных приложениях.
Var V: Variant;
begin
V:= 1;
V:= 2.3;
V:= true;
V:= ‘строка’
или:
Var R: real;
V: variant;
begin
V:= ‘9,55’;
R:= V*1.14
Данные типов Pointer и Variant надо применять только там, где без этого не обойтись (обращение к внешним программам, запущенным в сети).
Возможно описание сложных структур данных на основе произвольного комбинирования существующих структур данных и создание новых типов на основе определенных ранее.