Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное пособие 70025.doc
Скачиваний:
3
Добавлен:
01.05.2022
Размер:
141.31 Кб
Скачать

1.2. Многомерные массивы

Рассмотрим прямоугольные таблицы, состоящие из чисел и содержащие произвольное число m строк и произвольное число n столбцов. В математике их называют матрицами, а числа, входящие в состав матрицы - ее элемента­ми. Если число строк матрицы совпадает с числом ее столбцов, то матрица называется квадратной.

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

В общем виде описание двумерного массива выглядит так:

имя массива: array [НижняяГраницаИндекса1..ВерхняяГраницаИндекса1, НижняяГраницаИндекса2..ВерхняяГраницаИндекса2} of Тип;

Здесь НижняяГраницаИндекса1, ВерхняяГранщаИндекса1, НижняяГранща-Индекса2, ВерхняяГраницаИндекса2 - целые константы, определяющие диа­пазоны изменения индексов и, следовательно, число элементов массива, а тип - тип элементов массива.

Например, зададим массив следующим образом:

Var

M: Array [1..168,1..9] of Byte;

{задает двумерный массив, т. е. прямоугольную таблицу, состоящую из 168 строк и 9

столбцов}

Этот же массив можно задать иначе, непосредственно при описании полной переменной:

Var

M: Array [1..168] of Array [1..9] of Byte;

Можно задать описание массива так:

Туре

Vector = Array [1..9] of Byte;

Var

M: Array [1..168] of Vector;

Во всех трех случаях массив описан верно. В двумерном массиве доступ к любому из элементов осуществляется по двум индексам: номеру строки и номеру столбца, например:

M[100],[7] или M[100, 7] - это элемент, находящийся на пересече­нии сотой строки и седьмого столбца.

Число элементов массива равно произведению числа строк m на число столбцов n. Следовательно, массив M содержит 168*9 = 1512 элементов.

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

В языке Паскаль допускается работа с массивами, размерность которых больше двух. Трехмерный действительный массив может быть объявлен сле­дующим образом:

Var А : Array [1..3, 1..4, 1..5] of Real;

Элементы в таком массиве адресуются тремя индексами. Первый индекс задает номер матрицы, второй - номер строки и третий - номер столбца. Та­кой массив полезен, если некоторое значение определяется тремя параметра­ми. Например, массив температур может быть проиндексирован по широте, долготе и высоте. При выходе за третье измерение геометрическая аналогия по очевидным причинам невозможна. Количество измерений формально не ограничено.

Многомерные массивы, как и одномерные, можно задавать одним из способов ввода данных в программу. Значения элементов двумерных массивов выводят на экран и вводят с клавиатуры, как правило, по строкам, т. е. сначала все элементы первой стро­ки, затем второй и т. д. Это удобно выполнять при помощи вложенных инст­рукций for.

Например, требуется ввести в матрицу P размером 3 строки, 4 столбца следующие значения: 1-я строка -1, 1,1,1; 2-я строка - 2, 2, 2, 2; 3-я строка - 3,3,3,3, затем умножить на 3 каждый элемент массива и получить результат на мониторе распечатанным по строкам.

Program massiv5;

Uses Crt;

var

P: array[1..3, 1..4] of Integer;

i,j : Integer;

Begin

ClrScr;

For i: = 1 To 3 Do

begin

WriteLn ('Введи строку ', i);

For j :=1 To 4 Do

Read(P[i,j]);

end;

For i:=1 To 3 Do

begin

For j:=1 To 4 Do

Write (P[i,j]*3);

WriteLn;

end;

ReadKey;

End.

Здесь каждый раз, когда внутренний цикл завершается, внешний цикл увели­чивает i на единицу и внутренний цикл выполняется вновь. Таким образом, сначала вводятся, а потом выводятся все компоненты массива по строкам. При выводе мы умножаем каждый элемент массива на 3.

При описании массивов в программе удобно использовать именованные константы как значения верхних границ индексов массива. При задании мас­сива как сложной константы в блоке Const (или в блоках, если их несколько) в круглых скобках перечисляются элементы-массивы, состоящие из элемен­тов-скаляров. Для двумерного массива это может выглядеть так:

Const

a: Array [1..2, 1..5] of Integer = ((-1, 23, 0, 7, 6), (2, 0, -12, 6, 4));

Трехмерный массив можно задать аналогично или следующим образом:

Туре

Cube = Array [0..1, 0..1, 0..1] of Integer;

Const

M : Cube = (((0, 1), (2, 3)), ((4, 5), (6, 7)));

Элементы трехмерного массива будут хранить после этого следующие значения:

М[0, 0, 0] = 0; М[0, 0, 1] = 1; М[0, 1, 0] = 2; М[0, 1, 1] = 3;

М[1, 0, 0] = 4; М[1, 0, 1] = 5; М[1, 1, 0] = 6; М[1, 1, 1] = 7.

В стандартной матричной задаче может потребоваться:

- получить новую матрицу (ввести матрицу) по заданному правилу;

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

- преобразовать матрицу требуемым образом;

- определить, обладает ли матрица (ее один или несколько элементов, строка, столбец) указанным свойством;

- выполнить ту или иную операцию над матрицей (матрицами).

Следующая задача иллюстрирует использование вложенных циклов при вычислении

двойных сумм

Program massiv6;

Uses Crt;

var

sum: real;

i,j:1..100;

Begin

ClrScr;

sum: = 0;

Textcolor (LightRed);

For i: = 1 To 100 Do

For j : = 1 To 50 Do

sum : = sum + 1/ (i + sqr (j));

WriteLn (' Сумма равна ', sum);

ReadKey;

End.