Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка-ПРОГРАММИРОВАНИЕ -DELPHI 2007.doc
Скачиваний:
7
Добавлен:
12.11.2019
Размер:
2.04 Mб
Скачать

Раздел 6. Программирование с использованием двумерных массивов в системе delphi

6.1. Вводные замечания

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

6.2. Основные понятия

Если в качестве типа элемента одномерного массива берется другой массив, то образуется структура, называемая двумерным массивом. Для описания типа элементов может быть использован любой объявленный тип. Двумерный массив или матрица пред­ставляет собой прямоугольную таблицу элементов одинакового типа.

Пример:

type

vec == array [1.3] of integer;

mas = array [1..5] of vec; var massiv : mas;

В данном примере объявлен двумерный массив massiv. Massiv представляет матрицу, состоящую из 3 строк и 5 столбцов.

Возможен и другой способ описания двумерных массивов:

var massiv : array [1..3,1..5] of integer;

Двумерные массивы объявляются так же, как и одномерные, за исключением того, что в квадратных скобках после зарезервиро­ванного слова array стоят два разделенных запятыми определения индексов, относящихся к двум размерностям массива. Каждое оп­ределение индекса независимо от другого. Типы первого и второго индексов могут различаться.

По такому принципу можно описать не только двумерные, но и n-мерные массивы. Размерность массивов ограничивает только объем памяти конкретной ЭВМ.

Пример описания трехмерных массивов А и В:

type

vec - array [1..3] of integer;

mas == array [1..5] of vec;

tmas = array [1..8] of mas; var

a: tmas;

b: array [1..3,1-5,1-8] of integer;

Так же, как и для описания одномерных массивов, можно ис­пользовать предварительно определенные константы:

Const N=3;M=5;

var massiv: array [l..N,l..M] of integer;

В многомерных массивах последний индекс возрастает пер­вым.

Например:

var

A: array [1..3,1..5] of real;

А [1,1]

А [1,2]

А [1,3]

А [1,4]

А [1,5]

А[2,1]

А [2,5]

А [3,5]

Первый индекс обозначает номер строки в матрице, второй индекс - номер столбца.

Над многомерным массивом как единым целым можно вы­полнить три действия: "равно", "не равно", "присваивание". Эти действия выполняют аналогично, как и с одномерными массивами.

Каждый элемент двумерного массива можно обрабатывать, указывая 2 индекса: номер строки и номер столбца. Например, за­пись А[3,4] делает доступными для обработки значение элемента, находящегося в третьей строке четвертого столбца массива А.

Для работы с двумерными массивами обычно используются вложенные циклы. Часто применяется сложенная структура алго­ритма с модификаторами.

Обнуление элементов двумерного массива можно выполнить, используя вложенный оператор for:

For K:=l to3 do

for L:=l to 5 do A[K,L]:=0;

Ввод и вывод значений элементов двумерного массива с кла­виатуры можно осуществить с помощью компоненты TStringGrid страницы ADDITIONAL, предназначенной для создания таблиц, в ячейках которых располагаются произвольные текстовые строки. С помощью компоненты TЕdit, представляющей собой однострочный редактор текста, можно вводить и/или отображать достаточно длинные текстовые строки.

Пример:

Edit1.text:=StringGrid 1 .Cells[i,j]; // позволяет вывести в окно

//содержимое ячейки (более подробно см. пример),

где i - номер столбца; j - номер строки.

После выполнения присваивания в Edit5.Text хранится содер­жимое (текст) ячейки таблицы;

StringGridl.Cells[i,j] - определяет содержимое ячейки с таб­личными координатами (ij).

Начиная с 4 версии Delphi, были введены многомерные дина­мические массивы.

Описание двумерного динамического массива целых чисел:

Var

MAS: array of array of integer;

Установка размеров динамического массива выполняется с помощью процедуры

SetLength(var MAS; NL1,NL2: integer),

где MAS - имя массива,

NL1 - количество строк,

NL2 - количество столбцов.

Нумерация в динамическом массиве начинается с нуля.

Пример обнуления элементов двумерного массива, имеющего 5 строк и 5 столбцов:

var MAS: array of array of real; ij: integer;

SetLength(MAS,5,5);

for i:=0 to 4 do

for j:=0 to 4 do

MAS[ij]:=0;