Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекция 7.doc
Скачиваний:
3
Добавлен:
21.11.2019
Размер:
198.14 Кб
Скачать

6.2.2. Физическая структура

Физическая структура - это размещение элементов массива в памяти ЭВМ. Для случая двумерного массива, состоящего из (k1-n1+1) строк и (k2-n2+1) столбцов физическая структура представлена на рис. 6.3.

Рис. 6.3. Физическая структура двумерного массива из (k1-n1+1) строк и (k2-n2+1) столбцов

Многомерные массивы хранятся в непрерывной области памяти. Размер слота определяется базовым типом элемента массива. Количество элементов массива и размер слота определяют размер памяти для хранения массива. Принцип распределения элементов массива в памяти определен языком программирования. Так в FORTRAN элементы распределяются по столбцам - так, что быстрее меняется левые индексы, в PASCAL - по строкам - изменение индексов выполняется в направлении справа налево.

Количество байтов памяти, занятых двумерным массивом, определяется по формуле :

ByteSize = (k1-n1+1)*(k2-n2+1)*SizeOf(Тип)

Адресом массива является адрес первого байта начального компонента массива. Смещение к элементу массива Mas[i1,i2] определяется по формуле:

ByteNumber = [(i1-n1)*(k2-n2+1)+(i2-n2)]*SizeOf(Тип)

его адрес: @ByteNumber = @mas + ByteNumber.

Например:

var Mas : Array [3..5] [7..8] of Word;

Базовый тип элемента Word требует два байта памяти, тогда таблица 6.2 смещений элементов массива относительно @Mas будет следующей:

Таблица 6.2

Смещение (байт)

Идентификатор поля

Смещение (байт)

Идентификатор поля

+ 0

Mas[3,7]

+ 2

Mas[3,8]

+ 4

Mas[4,7]

+6

Mas[4,8]

+ 8

Mas[5,7]

+ 10

Mas[5,8]

Этот массив будет занимать в памяти: (5-3+1)*(8-7+1)*2=12 байт; а адрес элемента Mas[4,8]:

@Mas+((4-3)*(8-7+1)+(8-7)*2 = @Mas+6

6.2.3. Операции

    • Важнейшая операция физического уровня над массивом - доступ к заданному элементу. Как только реализован доступ к элементу, над ним может быть выполнена любая операция, имеющая смысл для того типа данных, которому соответствует элемент.

К операциям логического уровня над массивами необходимо отнести такие как сортировка массива, поиск элемента по ключу. Наиболее распространенные алгоритмы поиска и сортировок будут рассмотрены ниже.

6.2.4. Компоненты grid

Delphi предоставляет два табличных компонента TDrawGrid и TStringGrid, у которых есть общий предок - класс TCustomGrid. Многие свойства и методы эти компоненты наследуют у своего предка. Этот класс обладает методом TDrawCell, позволяющим отображать содержимое ячейки. Базовый класс оперирует прокруткой, выбором и линейками скроллинга.

property Col: longint; Номер сфокусированного столбца.

property ColCount: longint; Число столбцов в таблице.

property ColWidths[Index: Longint]: integer; - Ширина для каждого столбца (максимальное значение MaxCustomExtents, доступно только во время выполнения).

property DefaultColWidth: Longint - Ширина столбцов по умолчанию. Применяется при инициализации таблицы и при добавлении ячеек.

property DefaultRowHeight - Высота строки по умолчанию. Применяется при инициализации таблицы и при добавлении ячеек.

property FixedCols: Integer - Число столбцов в фиксированной области.

property FixedRows: Integer - Число строк в фиксированной области.

property Row - Номер сфокусированной строки (доступно только во время выполнения).

property RowCount - Число строк в таблице.

property RowHeights - массив высот строк (максимальное значение MaxCustomExtents, доступно только во время выполнения).

property Options;

Доступны следующие значения Options:

GoFixedHorzLine

ячейки в фиксированной области разделяются горизонтальными линиями

GoFixedVertLine

ячейки в фиксированной области разделяются вертикальными линиями

GoHorzLine

ячейки разделяются горизонтальными линиями

GoVertLine

ячейки разделяются вертикальными линиями.

GoRangeSelect

может быть выделено множество ячеек.

GoDrawFocusSelected

ячейка, имеющая фокус, рисуется тем же цветом, что и выделенная, иначе выделяется рамкой из точек.

GoRowSizing

высота строк может изменять индивидуально.

GoColSizing

ширина строк может изменять индивидуально.

GoRowMoving

строки могут перемещать мышью

GoColMoving

столбцы могут перемещаться мышью.

GoEditing

ячейки могут редактироваться.

GoAlwaysShowEditor

содержимое сфокусированной ячейки сразу загружается в редактор, иначе необходимо нажать F2.

GoTabs

Разрешен переход между ячейками при нажатии Tab.

GoRowSelect

Выделение всей текущей строки.

Компонент сетки TStringGrid разработан для того, чтобы упростить обработку строк и связанных с ними объектов.

TStringGrid предоставляет несколько дополнительных свойств, управляющих появлением сетки, а также события и методы, которые дают преимущество над табличной организацией сетки.

Компонент TStringGrid вводит возможность соединять объект с каждой ячейкой в сетке. Эти объекты могут содержать любую информацию.

property Cells[ACol, ARow: Integer]: string;

Массив строк ColCount*RowCount, которые связываются с каждой ячейкой.