Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Sitkin_Informatika_Programmirovanie_v_DELPHI.docx
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
600.56 Кб
Скачать

Обработкамногомерныхмассивов

x11

x12

x13

x1n

x21

x22

x23

x2n

x31

x32

x33

x3n

xm1

xm2

xm3

xmn

Для обработки многомерных массивов обычно требуется орга-низовать перебор индексов. При этом при изменении одного индекса,другие тоже должны пробегать ряд значений. В случае двумерногомассива, эквивалентного матрицеmn, для каждого из значений пер-вого индекса от 1 доm, второй также должен последовательно при-нятьряд значенийот1доn(рис.9.1).

второйиндекс

первыйиндекс

i=1..m

j=1..n

Рис.9.1

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

Пример9.1

Разработаемалгоритмзаполненияэлементовдвумерногомасси-варазмеромmn(рис.9.1) случайнымивещественнымичислами.

На рис. 9.2изображенасхема реализациис оператором цикла спредусловием,вложеннымвоператорцикласпредусловием.

constm=; n=;

varx:array[1..m, 1..n]ofreal;i,j: byte;

begin

randomize;

Рис.9.2

end;//конецпроцедуры

{выделенную рамкой часть можно заменить на}fori:=1tomdo//циклпереборастрок,а внёмforj:=1tondo//цикл перебора столбцовx[i,j]:=random;

{реализуеттужесхему,нозаписькомпактнее}

Нарис.9.3изображенасхемареализациипримерасоператоромцикласпостусловием,вложеннымвоператорцикласпостусловием.

constm=; n=;

varx:array[1..m, 1..n]ofreal;i,j: byte;

i= 1

j= 1

xij= случ. вещ.число 0..1

j=j+1

begin

randomize;

i:=1;//перваястрока

repeat//внешнийциклпереборстрок

j:=1;//первыйстолбецi-ойстроки

repeat//внутреннийциклпереборстолбцов

x[i,j]:=random;

j:=j+1;//переходкслед.столбцуi-ойстроки

untilj>n;//конецвнутреннегоцикла

i:=i+1;//переходкследующейстроке

untili>m;//конецвнешнегоцикла

end;//конецпроцедуры

Во всех вариантах, после того как пере-браны все элементы строки (т.е. все столб-цы), происходит выход из внутреннего циклаи переход к следующей итерации внешнегоцикласувеличениемпервогоиндексана

Рис.9.3

единицу,т.е.переходкновойстроке.Ипри

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

КомпонентStringGrid

вкладкаadditional

Предназначендлясозданиянаформетаблиц,содержащихвячейках строки текста. Используется для ввода, вывода и редактиро-вания двумерных массивов. Пиктограмма компонента расположена навкладкеAdditionalпалитры компонентов. Основные свойства компо-нентаStringGridпредставленывтабл.9.1.

ОсновныесвойствакомпонентаStringGrid

Таблица9.1

Свойство

Описание

Name

Имякомпонента.Используетсядлядоступаккомпонентуиегосвойствам

ColCount

Количествостолбцов

RowCount

Количествострок

Cells

Ячейкатаблицынапересечениистолбцаномер

Colи строки номерRow, определяется элемен-томCells[Col,Row].Нумерациястолбцовистроквкомпонентеосуществляетсяотнуля

FixedCols

Количествозафиксированныхслевастолбцов

FixedRows

Количествозафиксированныхсверхустрок

+Options.goEditing

.goTabs

True/FalseВозможностьредактированиясо-держимого ячеек во время работы приложенияTrue/FalseВозможностьиспользованиякла-

вишиTabдляперемещениякурсора

DefaultColWidth

Ширинастолбцов

DefaultRowHeight

Высотастрок

GridLineWidth

Шириналиний,разделяющихячейки

+Font

Характеристикишрифтатекста

ParentFont

True/False Наследование характеристикшрифтатекстаформы

Enabled

True/FalseДоступностькомпонента

Visible

True/FalseВидимостькомпонента

Матрица, введённая с компонентаStringGridпо схемеCells[i,j]x[i,j]будеттранспонированавпамятиотносительнокомпонента,т.к.всвойствеCells[Col,Row]первымуказываетсяномерстолбца.

Продемонстрируем алгоритм считывания элементов из компо-нентаStringGridв память в виде двумерного массива, а также органи-зациювывода егоэлементовнаформуследующимпримером.