Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Массивы типа Variant




Begin

N:= 3; m:= 1;

SetLength(arrMatr, N);

For i:= 0 To N-1 Do Begin

SetLength(arrMatr[i], N-i);

For j:= 0 To N-i-1 Do Begin

arrMatr[i, j]:= m;

Inc(m);

End;

End;

End;

 

В результате выполнения этого фрагмента формируется логическая структура, показанная на рисунке 5.2

 

 

Рисунок 5.2 - Логическая структура динамической матрицы arrMatr,
содержащей строки различных размеров

 

Физическая структура массива приводится на рисунке 5.3. Как показывает этот рисунок, для всего массива в сегменте статических данных для массива выделяется 4-хбайтовая ячейка, в которую помещается указатель (адрес) на вектор (arrMatr[0], arrMatr[1], arrMatr[2]), элементы которого располагаются в куче, занимая последовательные 4-хбайтовые ячейки. В этих ячейках содержатся ссылки на слоты соответствующих строк, а сами слоты размещаются в куче в непредсказуемом «порядке». Элементы каждой строки располагаются в слотах строки последовательно друг за другом. В ячейки элементов заносятся из значения.

 

 

Рисунок 5.3 - Физическая структура динамической матрицы arrMatr,
содержащей строки различных размеров

 

Переменной типа Variant, как указывалось в п. 3.3.10, нельзя присвоить значение обычного статического массива. Это можно сделать только с помощью специальных функций VarArrayCreate и VarArrayOf.

Функция VarArrayCreate определена следующим образом:

Function VarArrayCreate(Const Bounds: Array Of Integer;
VarType: Integer);

Здесь параметр Bounds является массивом, содержащим четное количество целых чисел, каждая пара которых определяет диапазон индекса, соответствующего паре. Параметр VarType определяет тип элементов массива. Он может принимать такие значения, как, например, varInteger, varDouble или varString - соответствие таких значений и определяемых ими типов приводится в пособиях по Object Pascal. Например, для создания вектора V1 из девяти элементов целого типа и матрицы V2 типа Double (размерности 4´6), можно воспользоваться следующими операторами:

Var V1, V2: Variant;

...

V1:= VarArrayCreate([2, 10], varInteger);

V2:= VarArrayCreate([0,3, 0,5], varDouble);

Пример создания и использования массива типа Variant дают следующие строки:

Var A: Variant;

...

A:= VarArrayCreate([0, 2], varVariant);

A[0]:= 12e-6;

A[1]:= 20;

A[2]:= 'Количество = ' + IntToStr(A[1]);

ShowMessage(A[1]); ShowMessage(A[2]);

Label1.Caption:= A[2];

Функция VarArrayOf возвращает одномерный массив элементов, задаваемый параметром Values, и имеет следующий интерфейс:

Function VarArrayOf(Const Values: Array Of Variant): Variant;

Например, можно «превратить» элемент A[2] из вышеприведенного примера в вектор с помощью операторов:

A[2]:= VarArrayOf([-1.5, ’Параметр = ’, 20]);

ShowMessage(A[2][1] + IntToStr(A[2][2]));

 




Поделиться с друзьями:


Дата добавления: 2014-01-07; Просмотров: 370; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.012 сек.