Программа на DelphiРефераты >> Программирование и компьютеры >> Программа на Delphi
tVoteArr = array [tVotes] of String [7];
Const
Votes : tVoteArr = ( 'Да', 'Нет', 'Не знаю' );
Var
V: tVoteArr;
S: String[20];
…
V:= Votes;
S:=V[UnDef];
…
Здесь в секции Type сначала описан перечислимый тип tVote из трех значений Yes, No, Undef. Затем через этот тип определен новый тип tVoteArr как тип-массив из трех элементов, каждый из которых является строкой длины 7. Далее в секции Const определена типизованная константа Votes, которая определена как массив трех строковых значений ('Да', 'Нет', 'Не знаю'). Затем в секции Var описаны переменные V и S разных типов. Предпоследняя и последняя строки являются исполняемыми операторами присваивания. Сначала переменной V присвоено начальное значение – константа Votes. Затем переменной S присвоено значение третьего элемента массива V. В результате значением строковой переменной S будет 'Не знаю'.
- Типизованные константы типа "запись". Это комбинированный тип констант, основанный на конструкциях типа Record (см. параграф 7.1), которые состоят из полей. Константы такого типа определяются по правилу "имя поля : значение поля".
Пример:
Type
tDayOfYear = Record {день года}
Week : (Mon,Tue,Wed,Thu,Fri,Sat,Sun); {день недели}
Num : 1 31; {день месяца}
Month : 1 12; {месяц }
Year : 1951 2050; {год}
End;
Const
D1 : (Week : Sun; Num : 26; Month : 10; Year : 2001 D1, которая представляет конкретную дату "Воскресенье, 26, октябрь);
Здесь в секции Type описана запись, состоящая из четырех полей и характеризующая день года. Назначения этих полей понятно из сопроводительных комментариев. Затем в секции Const описана типизованная константа (Sun; 26; 12; 2001), т. е. " Воскресенье, 26 октября 2001 года".
- Типизованные константы типа "множество". Эти константы могут быть построены как подмножества базовых или производных от них типов.
Примеры:
Type
tChildNameSet = set of ['Таня', 'Валя', 'Володя', 'Гена'];
Const
Girls2Set : tGirlsNamesSet = ['Валя', 'Гена'];
Indexes: set of integer = [300 500, 1777,3700];
Здесь в секции Type описано множество из четырех имен детей. Ниже в секции Const описано две константы, каждая из которых представляет подмножества. Первая – подмножество имен, объявленных ранее в tChildNameSet, вторая – подмножество целых чисел типа Integer.
6. Описание типов
Ранее уже приводились примеры описания переменных, в которых их тип указывался в Var-секции явно или на основе ранее объявленного пользовательского типа.
Описание секции типов начинается словом Type.
В табл. 4 дан пример двух идентичных способов описания переменных t, u, n.
Таблица 4
Явный способ описания переменных |
Описание переменных с предварительным описанием их типа |
Var t,u,n:(Mon, Tue,Wed, Thu,Fri,Sat,Sun); |
Type DaysOfWeek = (Mon, Tue,Wed, Thu,Fri,Sat,Sun); Var t,u,n: DaysOfWeek; |
В тех случаях, когда явный и типизованный способы описания переменных конкурируют, следует всегда отдавать предпочтение способу описания переменных с предварительным объявлением их типа в секции Type. Такой способ позволяет:
а) конкретизировать тип;
б) четко выделить множество переменных этого типа;
в) повысить уровень структурированности программы;
г) снизить вероятность путаницы в типах, когда переменные фактически того же типа объявлены разными способами;
д) уменьшить объем текста за счет возможности быстрой ссылки на ранее определенный тип, особенно в тех ситуациях, когда этот тип используется для порождения новых типов, переменных, функций и пр. в других секциях или модулях.
В этой связи важно подчеркнуть, что даже при совпадении базовых типов различие в пользовательских типах может привести к непредсказуемому поведению программы. Например, в нижеследующей секции Type два производных типа t1 и t2 имеют одинаковый базовый тип byte. Однако объявленные ниже в Var-секции переменные p1 и p2 будут расценены системой как переменные разных типов. Это обстоятельство может послужить причиной недоразумений в ходе составления и/или выполнения программы.
Type
t1 = byte; t2 = byte;
Var
p1: t1; p2: t2;
Корректным можно считать следующий аналог:
Type
t1 = byte;
Var
p1,p2: t1;
7. Структурные типы
Структурные типы представляют собой совокупность значений одного или нескольких различных типов. Их наличие позволяет программисту конструировать производные типы практически любой сложности, что резко расширяет возможности языка.
К числу структурных относятся следующие типы:
- множественные типы [Set],
- регулярные типы (массивы) [Array],
- комбинированные типы (записи) [Record],
- файловые типы [File],
- классы [Class],
- классовые ссылки [Class reference],
- интерфейсы [Interface].
Ниже будут подробно описаны первых четыре структурных типа – регулярный, комбинированный, множественный и файловый.
Три последних типа будут описаны отдельно в разделах, посвященных объектно-ориентированному программированию.
7.1. Регулярные типы (массивы)
Массив – это структура языка Object Pascal, представляющая собой упорядоченную совокупность элементов одного типа.
Следует различать два вида массивов: массив-тип и массив-переменную.
Массив-тип. Синтаксис маcсива-типа:
<имя массива> = Array [<тип индекса>, <тип индекса>, …, <тип индекса>]
Of <тип элемента>;
Всякий массив имеет размерность. Размерность определяется количеством типов индексов, которые заключены в квадратные скобки [ ].
Массив-тип предназначен для описания:
- структуры массива как типа;
- размерности массива;
- типов индексов массива;
- типа каждого элемента массива.
Так, в следующем примере
Type
tA1: array [1 10] of Real;
описана структура одномерного массива вещественных элементов (Real), в котором индекс может изменяться в диапазоне целых значений от 1 до 10. Его элементами являются вещественные типы tA1[1], tA1[2], tA1[3], …, tA1[9], tA1[10].
Другой пример:
Type
Color: (Red, Green); { перечислимый тип } Z: array [1 3, Color ] of Boolean; { массив }
В нем сначала описан простой перечислимый тип Color. Ниже на его основе описан двумерный массив Z логических (Boolean) элементов. Первый индекс массива имеет целый тип, а второй – тип Color. Таким образом, массив состоит из шести элементов – логических типов: