Алгоритмы обработки двумерных массивов

Двумерный массив (матрица) представляет собой таблицу, на пересечении строк и столбцов которой располагаются элементы. Каждый элемент имеет два индекса. Первый индекс обычно обозначается буквой i и указывает номер строки, в которой расположен элемент. Второй индекс обозначается буквой j и указывает номер столбца, в котором расположен элемент (рис 6.1). Размерность двумерного массива задается двумя числами: M – количество строк и N – количество столбцов.

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

Для обработки двумерного массива требуется два вложенных цикла, при этом наиболее удобно использовать циклы «Для» на основе блока модификации. Один будет перебирать строки, второй – столбцы массива. Таким образом, будут перебраны все элементы массива.

Ввод двумерного массива (рис. 6.2), также как и одномерного выполняется в два этапа. Вначале вводится размерность массива (блок 1), а затем значения для каждого элемента. Внешний цикл (блок 2) при i =1 «выбирает» 1-ю строку массива. Внутренний цикл (блок 3) перебирает все столбцы массива, т.е. поочередно выбираются элементы A 1,1, А 1,2, А 1,3 и т.д. до конца 1-й строки и вводятся их значения (блок 4). После выхода из внутреннего цикла происходит возврат в блок 2, где выбирается 2-я строка массива, для которой внутренний цикл опять переберет поочередно все элементы A 2,1, А 2,2, А 2,3 и т.д. Таким образом, элементы двумерного массива будут перебираться по строкам.

Аналогичным образом выполняется вывод элементов двумерного массива.

Если в блок-схеме на рис. 6.2. поменять местами параметры внешнего и внутреннего циклов, т.е. внешний цикл сделать по параметру j, а внутренний – по параметру i, то элементы массива будут перебираться по столбцам.

Пример 6.1. Сформировать вектор В размерностью M, каждый элемент которого равен количеству нулевых элементов соответствующей строки матрицы А размерностью M на N.

Как видно из условия количество элементов вектора В равно количеству строк матрицы А. Для решения поставленной задачи необходимо организовать построчный перебор элементов двумерного массива. Внешним должен быть цикл по параметру i, внутренним цикл по параметру j. Это даст возможность после завершения обработки каждой строки формировать элементы одномерного массива В. Блок-схема алгоритма приведена на рис. 6.3.


Блоки 2-5 вводят исходный двумерный массив А, описанным выше способом. Затем организовывается внешний цикл «Для» по параметру i на основе блока модификации (блок 6), который будет одновременно перебирать строки массива А и элементы одномерного массива В. С целью оптимизации алгоритма не вводится отдельная переменная для хранения количества нулевых элементов в каждой строке матрицы. Вместо неё будут использоваться непосредственно элементы массива В.

Для выбранной во внешнем цикле i -й строки обнуляется i -й элемент массива В (блок 7). Затем организовывается внутренний цикл «Для» по параметру j (блок 8), перебирающий столбцы массива А, т.е. элементы i -й строки. Каждый элемент проверяется на равенство нулю (блок 9), и в случае выполнения условия происходит увеличение счетчика нулевых элементов i -й строки, значение которого хранится в элементе Bi (блок 10). После завершения обработки строки (выхода из внутреннего цикла) происходит вывод i -го элемента массива В (блок 11) и переход к следующей строке. Обработав все строки двумерного массива А, алгоритм завершит свою работу.

Пример 6.2. Сформировать вектор В размерностью N, каждый элемент которого равен среднему арифметическому значению элементов соответствующего столбца матрицы А размерностью M на N.

В данном примере количество элементов вектора В равно количеству столбцов матрицы А. Для решения задачи необходимо организовать перебор элементов двумерного массива по столбцам. Внешним должен быть цикл по параметру j, внутренним цикл по параметру i. Это даст возможность после завершения обработки каждого столбца вычислять соответствующие элементы одномерного массива В. Блок-схема алгоритма приведена на рис. 6.4.

Ввод элементов массива А осуществляется построчно (блоки 2-5). Во внешнем цикле по параметру j выбирается столбец массива А (блок 6), для него обнуляется значение суммы, которая будет хранится в соответствующем j -м элементе массива В (блок 7). Внутренний цикл по параметру i (блок 8) выполняет перебор и суммирование всех элементов текущего j -го столбца массива А (блок 9). После завершения работы внутреннего цикла в j -м элементе массива В вычисляется среднее арифметическое значение элементов j -го столбца массива А (блок 10), которое затем выводится (блок 11). На этом заканчивается тело внешнего цикла и происходит переход на его начало, где выбирается следующий столбец матрицы. Обработав все столбцы двумерного массива А, алгоритм завершит свою работу.

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

Пример 6.3. В каждой строке квадратной матрицы А размерностью N на N найти наибольший элемент и поменять его местами с элементом главной диагонали.

Главной диагональю квадратной матрицы называется диагональ, соединяющая верхний левый угол матрицы с правым нижним углом. Для элементов, расположенных на главной диагонали соблюдается соотношение между индексами: i=j. Для элементов расположенных ниже главной диагонали: i > j. Для элементов расположенных выше главной диагонали: i < j. Перебирая элементы матрицы и проверяя соотношения между индексами, всегда можно определить, где расположен текущий элемент.

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

В блоках 2-5 вводится построчно квадратная матрица А размерностью N на N. Внешний цикл по параметру i (блок 6) выбирает текущую i -ю строку матрицы, в которой будет выполняться поиск максимального элемента. Вначале за максимум принимается первый элемент i -й строки (блок 7). Внутренний цикл перебирает элементы строки, начиная со второго (блок 8), и сравнивает их с элементом принятым за максимальный (блок 9). Если текущий элемент оказывается больше, чем принятый за максимум, то в переменной jmax запоминается его позиция в i -й строке, т.е. номер столбца, в котором этот элемент находится (блок 10). В противном случае текущий элемент пропускается. После выхода из внутреннего цикла в элемент главной диагонали Ai,i текущей i -й строки заносится значение максимального элемента этой строки Ai,jmax (блок 11). На этом заканчивается обработка текущей строки массива А (тело внешнего цикла) и происходит выбор следующей строки массива. После завершения обработки всех строк двумерного массива А, в блоках 12-14 выводится преобразованная матрица и алгоритм завершает свою работу.



Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: