Кроме базовых типов данных, рассмотренных в лекции 6, язык Object Pascal предоставляет простые и
Используя базовые, простые и
Напомним, что к базовым типам относятся:
К простым типам относятся:
К структурированным типам относятся:
Для того чтобы создать переменную производного типа, сначала следует определить этот производный тип. Объявление нового производного типа указывается ключевым словом type.
Объявление произвольного типа как нового имени существующего типа в языке Object Pascal имеет следующее формальное описание:
type имя_нового_типа = имя_существующего_типа;
Объявление произвольного типа как нового типа в языке Object Pascal имеет следующее формальное описание:
type имя_нового_типа = type имя_существующего_типа;
При объявлении произвольного типа как нового имени типа, тип переменных производного типа и типа, используемого для его создания, будет совпадать. Если перед именем существующего типа указать ключевое слово type, то компилятор создаст новый тип. При этом указание в качестве формального параметра подпрограммы переменной существующего типа, а в качестве фактического параметра подпрограммы - переменной нового типа, созданного на базе данного существующего типа, вызовет для var -параметров ошибку времени компиляции.
В языке Object Pascal объявление типов и переменных может быть выполнено только в определенных местах программы: секция объявления типа type используется для объявлений типов, а секция var для объявления переменных.
Например:
type TValReal1 = Real; var // Переменные X и Y имеют // один и тот же тип X: Real; Y: TValReal1; Е type TValReal2 = type Real; var // Переменные X и Y имеют разные типы X: Real; Y: TValReal2;
язык Object Pascal предоставляет два простых типа, описывающих множества значений. Это:
Множество языка Object Pascal - это набор значений порядкового или перечислимого типа. Множество определяется ключевым словом set of.
Создание порядкового и перечислимого типов имеет следующее формальное описание:
Идентификатор = Начальное_значение ..
Конечное_значение;
Идентификатор = {Значение_i .,...};
Идентификатор = Значение_i..Значение_j;
Идентификатор = set of порядковый
или перечислимый тип.
Например:
type
{Объявление перечислимого типа}
TMyColor = {Red,Blue,Yellow};
{Объявление типа множество}
TMyClr = set of TMyColor;
var
{Объявление переменных созданных типов}
ValC1, ValC2: TMyClr;
begin
{Присвоение значения переменной
типа множество}
ValC1 := [Blue];
ValC2 := ValC1+[ Red];
end.
Начальным и конечным значением интервала для
Перед работой с переменной множественного типа ее следует проинициализировать. Значения инициализации указываются в квадратных скобках.
Например:
type TMyInts = 1..500;
TIntSet = set of TMyInts;
{Объявление переменной типа множества}
var set1: TIntSet;
begin
{Инициализация переменной
типа множества}
set1:=[1,2,3,4];
end.
Над множеством допустимы следующие операции:
+ );- );* );<=, >=, =, <> );in ).Например:
type
{Порядковый тип: значения от 1 до 9}
CountType = 1..9;
LowerCharType = а..я;
AType = (A1, A2, A3, A4, A5);
{Порядковый тип: значения A3, A4 и A5}
AType3 = A3..A5;
{Множество на основе порядкового типа}
ATypeSet = set of AType3;
{Множество LetterType }
LetterType = set of 'A'..'Z';
var
{Объявление переменной типа множества}
aset: ATypeSet;
begin
{Присвоение значения переменной
множественного типа}
aset:= [A3] + [A4];
{Вычитание множеств}
aset:= aset - [A4];
end.
Каждая переменная множественного типа может иметь значение - множество. Для изменения значений переменной множественного типа могут использоваться операции объединения ( + ) и разности ( - ) множеств.
Например:
begin set1:=set1 +[5,6]; end.
Для определения принадлежности значения некоторому множеству используется операция in.
Например:
begin if 5 in set1 then ShowMessage( 'Значение принадлежит множеству set1'); end.
В языке Object Pascal можно создавать одномерные и многомерные массивы. Все элементы массива имеют одинаковый тип.
Одномерный массив языка Object Pascal имеет следующее формальное описание:
Идентификатор: array [нач_индекс..кон_индекс] of тип_массива;
Например:
type RealArr = array[1..100] of Real; var int1: array[1..20] of Integer; int2: array[1..20] of Integer; int3, int4: array[1..10] of Integer; real1: array[1..10] of Real; begin Int1 := Int2; end.
Массивы могут объявляться как константы.
Например:
type
TCub = array[0..1, 0..1, 0..1]
of Integer;
const
cub1: TCube = (((0, 1), (2, 3)),
((4, 5), (6,7)));
{ Элементы массива cub1 будут
содержать следующие значения:
cub1 [0,0,0] = 0
cub1 [0,0,1] = 1
cub1 [0,1,0] = 2 и т.д.
}
Массив символов объявляется как массив переменных типа Char. .
Строки можно реализовывать как символьные массивы, ограниченные 0-символом ( #0 ).
Например:
const
TempString: array[0..8] of Char =
'Строка'#0;
var
P: PChar; {Указатель на строку}
begin
P := 'Строка';
P := @TempString;
{Переменная P указывает на
значение 'Строка'}
end.
Массив символов типа Char и значение типа эквивалентны.
Например:
var
MyArray: array[0..5] of Char;
MyPointer: PChar;
begin
MyArray := 'array';
MyPointer := MyArray;
MyProc(MyArray);
{Эквивалентно вызову
MyProc(MyPointer);}
end.
array[диапазон_первого_индекса, ..., диапазон_n_индекса] of базовый_тип; array[диапазон] of array[диапазон] of array[диапазон] of тип;
Так, объявление
type MyMassiv = array[1..10] of array[1..70] of Integer;
эквивалентно объявлению
type MyMassiv = array[1..10, 1..70] of Integer;
Например:
type MyAr = array[1..10, 1..50] of Real; begin MyAr[1,49]:= 49; end.
По принципу выделения памяти под
Память под статический массив выделяется при его создании.
Динамический массив не имеет фиксированного размера или длины.
При объявлении динамического массива память под него не выделяется. Выделение памяти происходит каждый раз при присвоении значения массиву или при вызове процедуры SetLength.
Создание динамического массива имеет следующее формальное описание:
array of тип_элементов_массива;
Например:
{Объявление динамического массива}
var MyAr: array of Integer;
{Определение количества элементов
в динамическом массиве:}
SetLength(MyAr, 10);
Элементы динамического массива всегда индексируются с 0. Переменная типа динамического массива является указателем, и к ней применимы операции над указателями. Для освобождения памяти, занимаемой динамическим массивом, можно присвоить значение nil переменной, ссылающейся на массив. Количество элементов динамического массива определяется процедурой SetLength. Функция Length возвращает количество элементов в динамическом массиве.
При сравнении двух переменных типа динамического массива выполняется сравнение их ссылок, а не значений их элементов. Например:
var
A, B: array of Integer;
begin
SetLength(A, 1); SetLength(B, 1);
A[0] := 2; B[0] := 2;
{A[0] = B[0] вернет значение True}
{A = B вернет значение False}
end.
Для усечения динамического массива можно использовать функцию Copy.
Например:
var
A: array of Integer;
begin
SetLength(A, 50);
{Оставляет 10 элементов массива A}
A := Copy(A, 0, 10);
end.
Если при объявлении функции или процедуры формальный параметр определяется как array of тип_массива, то эта функция или процедура может получить в качестве фактического параметра любой динамический или статический массив указанного типа вне зависимости от его размера и индексации его элементов.
Запись представляет собой структуру, состоящую из набора полей различных типов. Каждый элемент записи называется полем. Каждое поле имеет свой идентификатор и свой тип.
Запись может иметь поля двух видов:
Объявление типа записи завершается ключевым словом end;.
Например:
type
MyDateRec = record
Year: Integer;
Month: 1..12;
Day: 1..31;
end;
var
{Объявление переменных}
Record1, Record2: MyDateRec;
begin
{Доступ к полям записи: }
Record1.Month := 11;
Record1.Day := 22;
{Доступ к полям записи:}
with Record1 do
begin
Year := 2004;
Month := 11;
Day := 22;
end;
{Копирование значений полей
записей одного типа }
Record2:= Record1;
Переменная типа записи может быть объявлена одновременно с определением полей записи.
Например:
var S: record Name: string; Age: Integer; end;
Запись, состоящая из одних вариантных полей, реализует тип, в некотором роде аналогичный типу union для языка С++.
Вариантные поля позволяют на основе одного типа записи создавать экземпляры записей, содержащие поля разных типов. Это позволяет значительно экономить память.
Объявление записи имеет следующее формальное описание:
type имя_типа_записи = record
список_полей: тип; {фиксированные поля}
...
case тег: тип_варианта
of {вариантные поля}
константа_или_список: (вариант_1);
...
константа_или_список: (вариант_n);
end;
Описание каждого фиксированного поля состоит из его идентификатора (или списка идентификаторов) и типа. Описания полей разделяются точкой с запятой. Вариантная часть объявления записи начинается с зарезервированного слова case.
При определении вариантной части тег и символ двоеточия могут быть опущены в том случае, если тип_варианта описывает существующий тип или каждая константа ( константа_или_список ) в вариантной части является значением типа тип_варианта.
Тип варианта не может быть длинной строкой, динамическим массивом, типом Variant или интерфейсом, но он может быть указателем на эти типы.
Например:
type
TPerson = record
FirstName, LastName: string[40];
case bl: Boolean
of {Вариантные поля}
True: (str1: string[40]);
False: (str2: string[20];
date1: TDate);
end;
TShapeList = (Rectangle, Circle,
Other, Ellipse);
TFigure = record
case TShapeList of
Rectangle: (Height, Width: Real);
Circle: (Radius: Real);
Ellipse, Other: ();
end;
Применяя вариантные поля, можно одинаково трактовать данные различных типов, используя для доступа к ним вариантные поля соответствующих типов.
Файл представляет собой упорядоченный набор элементов одного типа.
Стандартные процедуры ввода и вывода используют предопределенный тип TextFile, или Text, который реализует файл как упорядоченный набор строк символов.
Объявление типа файл и создание переменных файлового типа имеет следующее формальное описание:
type тип_файла = file of тип; var идентификатор: file of тип_файла;
Тип, указываемый после ключевых слов file of, может быть производным типом или базовым типом. Так, в качестве типа можно указать string[число_символов] или array[нач_инд..кон_инд] of Cha r.
Объявление нетипизированного файла имеет следующее формальное описание:
var идентификатор: file;
Для создания переменной файлового типа следует предварительно объявить файловый тип, а затем объявить переменную созданного типа, или сразу объявить переменную, указав используемый тип как файловый.
Например:
type
Phone = record Name: string[30];
PhoneNumber: string[20];
end;
{Объявление файлового типа }
PhoneList = file of Phone;
var
{Объявление переменной файлового типа}
book1: PhoneList;
{Объявление переменной с указанием типа
как файлового типа}
book2: file of Phone;
Кроме базовых типов данных, рассмотренных в лекции 6, язык Object Pascal предоставляет простые и
Используя базовые, простые и
Напомним, что к базовым типам относятся:
К простым типам относятся:
К структурированным типам относятся:
Для того чтобы создать переменную производного типа, сначала следует определить этот производный тип. Объявление нового производного типа указывается ключевым словом type.
Объявление произвольного типа как нового имени существующего типа в языке Object Pascal имеет следующее формальное описание:
type имя_нового_типа = имя_существующего_типа;
Объявление произвольного типа как нового типа в языке Object Pascal имеет следующее формальное описание:
type имя_нового_типа = type имя_существующего_типа;
При объявлении произвольного типа как нового имени типа, тип переменных производного типа и типа, используемого для его создания, будет совпадать. Если перед именем существующего типа указать ключевое слово type, то компилятор создаст новый тип. При этом указание в качестве формального параметра подпрограммы переменной существующего типа, а в качестве фактического параметра подпрограммы - переменной нового типа, созданного на базе данного существующего типа, вызовет для var -параметров ошибку времени компиляции.
В языке Object Pascal объявление типов и переменных может быть выполнено только в определенных местах программы: секция объявления типа type используется для объявлений типов, а секция var для объявления переменных.
Например:
type TValReal1 = Real; var // Переменные X и Y имеют // один и тот же тип X: Real; Y: TValReal1; Е type TValReal2 = type Real; var // Переменные X и Y имеют разные типы X: Real; Y: TValReal2;
язык Object Pascal предоставляет два простых типа, описывающих множества значений. Это:
Множество языка Object Pascal - это набор значений порядкового или перечислимого типа. Множество определяется ключевым словом set of.
Создание порядкового и перечислимого типов имеет следующее формальное описание:
Идентификатор = Начальное_значение ..
Конечное_значение;
Идентификатор = {Значение_i .,...};
Идентификатор = Значение_i..Значение_j;
Идентификатор = set of порядковый
или перечислимый тип.
Например:
type
{Объявление перечислимого типа}
TMyColor = {Red,Blue,Yellow};
{Объявление типа множество}
TMyClr = set of TMyColor;
var
{Объявление переменных созданных типов}
ValC1, ValC2: TMyClr;
begin
{Присвоение значения переменной
типа множество}
ValC1 := [Blue];
ValC2 := ValC1+[ Red];
end.
Начальным и конечным значением интервала для
Перед работой с переменной множественного типа ее следует проинициализировать. Значения инициализации указываются в квадратных скобках.
Например:
type TMyInts = 1..500;
TIntSet = set of TMyInts;
{Объявление переменной типа множества}
var set1: TIntSet;
begin
{Инициализация переменной
типа множества}
set1:=[1,2,3,4];
end.
Над множеством допустимы следующие операции:
+ );- );* );<=, >=, =, <> );in ).Например:
type
{Порядковый тип: значения от 1 до 9}
CountType = 1..9;
LowerCharType = а..я;
AType = (A1, A2, A3, A4, A5);
{Порядковый тип: значения A3, A4 и A5}
AType3 = A3..A5;
{Множество на основе порядкового типа}
ATypeSet = set of AType3;
{Множество LetterType }
LetterType = set of 'A'..'Z';
var
{Объявление переменной типа множества}
aset: ATypeSet;
begin
{Присвоение значения переменной
множественного типа}
aset:= [A3] + [A4];
{Вычитание множеств}
aset:= aset - [A4];
end.
Каждая переменная множественного типа может иметь значение - множество. Для изменения значений переменной множественного типа могут использоваться операции объединения ( + ) и разности ( - ) множеств.
Например:
begin set1:=set1 +[5,6]; end.
Для определения принадлежности значения некоторому множеству используется операция in.
Например:
begin if 5 in set1 then ShowMessage( 'Значение принадлежит множеству set1'); end.
В языке Object Pascal можно создавать одномерные и многомерные массивы. Все элементы массива имеют одинаковый тип.
Одномерный массив языка Object Pascal имеет следующее формальное описание:
Идентификатор: array [нач_индекс..кон_индекс] of тип_массива;
Например:
type RealArr = array[1..100] of Real; var int1: array[1..20] of Integer; int2: array[1..20] of Integer; int3, int4: array[1..10] of Integer; real1: array[1..10] of Real; begin Int1 := Int2; end.
Массивы могут объявляться как константы.
Например:
type
TCub = array[0..1, 0..1, 0..1]
of Integer;
const
cub1: TCube = (((0, 1), (2, 3)),
((4, 5), (6,7)));
{ Элементы массива cub1 будут
содержать следующие значения:
cub1 [0,0,0] = 0
cub1 [0,0,1] = 1
cub1 [0,1,0] = 2 и т.д.
}
Массив символов объявляется как массив переменных типа Char. .
Строки можно реализовывать как символьные массивы, ограниченные 0-символом ( #0 ).
Например:
const
TempString: array[0..8] of Char =
'Строка'#0;
var
P: PChar; {Указатель на строку}
begin
P := 'Строка';
P := @TempString;
{Переменная P указывает на
значение 'Строка'}
end.
Массив символов типа Char и значение типа эквивалентны.
Например:
var
MyArray: array[0..5] of Char;
MyPointer: PChar;
begin
MyArray := 'array';
MyPointer := MyArray;
MyProc(MyArray);
{Эквивалентно вызову
MyProc(MyPointer);}
end.
array[диапазон_первого_индекса, ..., диапазон_n_индекса] of базовый_тип; array[диапазон] of array[диапазон] of array[диапазон] of тип;
Так, объявление
type MyMassiv = array[1..10] of array[1..70] of Integer;
эквивалентно объявлению
type MyMassiv = array[1..10, 1..70] of Integer;
Например:
type MyAr = array[1..10, 1..50] of Real; begin MyAr[1,49]:= 49; end.
По принципу выделения памяти под
Память под статический массив выделяется при его создании.
Динамический массив не имеет фиксированного размера или длины.
При объявлении динамического массива память под него не выделяется. Выделение памяти происходит каждый раз при присвоении значения массиву или при вызове процедуры SetLength.
Создание динамического массива имеет следующее формальное описание:
array of тип_элементов_массива;
Например:
{Объявление динамического массива}
var MyAr: array of Integer;
{Определение количества элементов
в динамическом массиве:}
SetLength(MyAr, 10);
Элементы динамического массива всегда индексируются с 0. Переменная типа динамического массива является указателем, и к ней применимы операции над указателями. Для освобождения памяти, занимаемой динамическим массивом, можно присвоить значение nil переменной, ссылающейся на массив. Количество элементов динамического массива определяется процедурой SetLength. Функция Length возвращает количество элементов в динамическом массиве.
При сравнении двух переменных типа динамического массива выполняется сравнение их ссылок, а не значений их элементов. Например:
var
A, B: array of Integer;
begin
SetLength(A, 1); SetLength(B, 1);
A[0] := 2; B[0] := 2;
{A[0] = B[0] вернет значение True}
{A = B вернет значение False}
end.
Для усечения динамического массива можно использовать функцию Copy.
Например:
var
A: array of Integer;
begin
SetLength(A, 50);
{Оставляет 10 элементов массива A}
A := Copy(A, 0, 10);
end.
Если при объявлении функции или процедуры формальный параметр определяется как array of тип_массива, то эта функция или процедура может получить в качестве фактического параметра любой динамический или статический массив указанного типа вне зависимости от его размера и индексации его элементов.
Запись представляет собой структуру, состоящую из набора полей различных типов. Каждый элемент записи называется полем. Каждое поле имеет свой идентификатор и свой тип.
Запись может иметь поля двух видов:
Объявление типа записи завершается ключевым словом end;.
Например:
type
MyDateRec = record
Year: Integer;
Month: 1..12;
Day: 1..31;
end;
var
{Объявление переменных}
Record1, Record2: MyDateRec;
begin
{Доступ к полям записи: }
Record1.Month := 11;
Record1.Day := 22;
{Доступ к полям записи:}
with Record1 do
begin
Year := 2004;
Month := 11;
Day := 22;
end;
{Копирование значений полей
записей одного типа }
Record2:= Record1;
Переменная типа записи может быть объявлена одновременно с определением полей записи.
Например:
var S: record Name: string; Age: Integer; end;
Запись, состоящая из одних вариантных полей, реализует тип, в некотором роде аналогичный типу union для языка С++.
Вариантные поля позволяют на основе одного типа записи создавать экземпляры записей, содержащие поля разных типов. Это позволяет значительно экономить память.
Объявление записи имеет следующее формальное описание:
type имя_типа_записи = record
список_полей: тип; {фиксированные поля}
...
case тег: тип_варианта
of {вариантные поля}
константа_или_список: (вариант_1);
...
константа_или_список: (вариант_n);
end;
Описание каждого фиксированного поля состоит из его идентификатора (или списка идентификаторов) и типа. Описания полей разделяются точкой с запятой. Вариантная часть объявления записи начинается с зарезервированного слова case.
При определении вариантной части тег и символ двоеточия могут быть опущены в том случае, если тип_варианта описывает существующий тип или каждая константа ( константа_или_список ) в вариантной части является значением типа тип_варианта.
Тип варианта не может быть длинной строкой, динамическим массивом, типом Variant или интерфейсом, но он может быть указателем на эти типы.
Например:
type
TPerson = record
FirstName, LastName: string[40];
case bl: Boolean
of {Вариантные поля}
True: (str1: string[40]);
False: (str2: string[20];
date1: TDate);
end;
TShapeList = (Rectangle, Circle,
Other, Ellipse);
TFigure = record
case TShapeList of
Rectangle: (Height, Width: Real);
Circle: (Radius: Real);
Ellipse, Other: ();
end;
Применяя вариантные поля, можно одинаково трактовать данные различных типов, используя для доступа к ним вариантные поля соответствующих типов.
Файл представляет собой упорядоченный набор элементов одного типа.
Стандартные процедуры ввода и вывода используют предопределенный тип TextFile, или Text, который реализует файл как упорядоченный набор строк символов.
Объявление типа файл и создание переменных файлового типа имеет следующее формальное описание:
type тип_файла = file of тип; var идентификатор: file of тип_файла;
Тип, указываемый после ключевых слов file of, может быть производным типом или базовым типом. Так, в качестве типа можно указать string[число_символов] или array[нач_инд..кон_инд] of Cha r.
Объявление нетипизированного файла имеет следующее формальное описание:
var идентификатор: file;
Для создания переменной файлового типа следует предварительно объявить файловый тип, а затем объявить переменную созданного типа, или сразу объявить переменную, указав используемый тип как файловый.
Например:
type
Phone = record Name: string[30];
PhoneNumber: string[20];
end;
{Объявление файлового типа }
PhoneList = file of Phone;
var
{Объявление переменной файлового типа}
book1: PhoneList;
{Объявление переменной с указанием типа
как файлового типа}
book2: file of Phone;
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.