Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Алгоритмизация и программирование ч.2.doc
Скачиваний:
6
Добавлен:
24.09.2019
Размер:
7.68 Mб
Скачать

4. Двумерные массивы

4.1. Описание массива

Ранее мы рассматривали одномерные массивы. Элементы массива могут, в свою очередь, также быть массивами, например:

const n = 4; m = 3;

type mas = array [1 .. n] of integer;

mas2 = array [1 .. m] of mas;

Обычно это записывается так:

type mas2 = array [1 .. m, 1 .. n] of integer;

Здесь описан тип массива, состоящего из m массивов, каждый из которых содержит n целых чисел. Иными словами, это матрица из m строк и n столбцов, или двумерный массив (рис. 5.1). Обе его размерности должны быть константами или константными выражениями, поскольку инструкции по выделению памяти формируются компилятором до выполнения программы. Имя типа используется при описании переменных, например:

var a, b : mas2;

В памяти двумерный массив располагается по строкам, то есть при просмотре массива от начала в первую очередь изменяется правый индекс (номер столбца):

a11 a12 a13 a14 a21 a22 a23 a24 a31 a32 a33 a34

| 1-я строка | 2-я строка | 3-я строка |

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

а[1,4] b[i,j] b[j,i]

Допускается отсутствие правого индекса, например, а[1] или b[i]. Такая запись интерпретируется как первая или i -я строка массива.

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

const m = 50: n = 100:

var x, у : array [1 .. m, 1 .. n] of real;

Над массивами одного типа определена операция присваивания, например:

х := у;

или

а[1] := a[i];

4.2. Организация ввода и вывода двумерного массива

Ввод

Матрицы, как и массивы, нужно вводить (выводить) поэлементно. Блок-схема ввода элементов матрицы изображена на рис. Вывод матрицы организуется аналогично вводу.

Вывод

Если надо вывести на экран массив, описанный как

t: array [1 .. 6, 4 .. 7] of integer;

то, сообразив, что в нем всего 24 элемента, можно вывести их в одну строку или столбец. Однако нагляднее было бы вывести массив в виде:

4

5

6

7

1

t[1,4]

t[1,5]

t[1,6]

t[1,7]

2

t[2,4]

t[2,5]

t[2,6]

t[2,7]

3

t[3,4]

t[3,5]

t[3,6]

t[3,7]

4

t[4,4]

t[4,5]

t[4,6]

t[4,7]

5

t[5,4]

t[5,5]

t[5,6]

t[5,7]

6

t[6,4]

t[6,5]

t[6,6]

t[6,7]

Можно вывести на экран одну строку этой таблицы (например, третью):

for j:=4 to 7 do write(t[3,j]:6);

Поскольку после вывода каждой строки следует перевести курсор на новую строку, добавляем после цикла writeln;. Итак, для вывода на экран i-ой строки таблицы (i=1,2,...,6) необходимы команды

for j:=4 to 7 do write(t[i,j]:6);

writeln;

Осталось повторить это при всех возможных значениях i (от 1 до 6). Получаем вложенные циклы:

for i:=1 to 6 do

  begin

     for j:=4 to 7 do write(t[i,j]:6); 

     writeln

      end;

Пример. Минимальный по модулю элемент

Написать программу, которая находит минимальный по модулю элемент вещественной матрицы размером 5×8 и его координаты.

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

Если в матрице искомых элементов несколько, примем, что будут выданы координаты самого верхнего левого из них. Например, для матрицы, приведенной на рис. 5.2, минимальный по модулю элемент равен нулю и расположен на пересечении строки 1 и столбца 2.

Алгоритм выглядит так:

  1. Ввести матрицу.

  2. Принять элемент, расположенный на пересечении первой строки и первого столбца, за искомый (для этого запомнить его модуль, номер строки и номер столбца).

  3. Поочередно просмотреть все элементы матрицы; если модуль очередного элемента оказывается меньше сохраненного, принять этот элемент за искомый (то есть запомнить его модуль, номер строки и номер столбца).

  4. Вывести результаты.

Программа:

Размеры массива заданы именованными константами тип, что позволяет легко их изменять.

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

СОВЕТ

Для упрощения отладки рекомендуется приготовить тестовый массив в текстовом файле и изменить программу так, чтобы она читала значения из файла.