Двумерные массивы
Двумерный массив При решении практических задач часто приходится иметь дело с различными таблицами данных, математическим эквивалентом которых служат матрицы. Такой способ организации данных, при котором каждый элемент определяется номером строки и номером столбца, на пересечении которых он расположен, называется двумерным массивом (матрицей) или таблицей. Их можно занести в память компьютера, используя понятие двумерного массива. Положение элемента в массиве определяется двумя индексами. Они показывают номер строки и номер столбца. Например: A[7,6], D[56,47]. 2
Пример объявления двумерного массива Организацию обработки элементов статического двумерного (многомерного) массива можно организовать с использованием сложно циклической структуры. Так как, например, при заполнении массива необходимо произвести обход всех элементов по строкам ( i ) изменяя индексы столбцов ( j ). Таким образом объявленный массив из N строк и M столбцов Const n=6; m=8; Var a : array [1..n, 1..m] of integer; будет организован в памяти ЭВМ следующим образом: 3
Ввод – вывод элементов двумерного массива Constn=6;m=8;Var a : array [1..n, 1..m] of integer; I, j : integer; Begin writeln ( Заполнение элементов целочисленного массива A[6,8] ); for i:=1 to n do for j:=1 to m do for j:=1 to m dobegin write (a[, i,,, j, ] =); read (a[ i, j ]); end; writeln (В памяти компьютера сформирован двумерный массив с элементами); for i:=1 to n do begin for j:=1 to m do for j:=1 to m do write (a[ i, j ]:6); writeln;endEnd. начало Aij A[6,8] конец Aij 4
Ввод – вывод элементов двумерного массива Генерация элементов двумерного массива случайными числами. Constn=6;m=8;Var a : array [1..n, 1..m] of integer; I, j : integer; Beginrandomize; for i:=1 to n do begin for j:=1 to m do for j:=1 to m dobegin a[ i, j ]:=random(101); write (a[ i, j ]:6); end;writeln;endEnd. начало Aij A[6,8] конец 5
Квадратные матрицы В квадратной матрице количество строк и столбцов - одинаково и равно n. Любая квадратная матрица имеет элементы главной и побочной диагонали. Диагональные элементы главной диагонали : a[1, 1];a[2, 2];a[3, 3];….;a[n, n]. a[1, 1];a[2, 2];a[3, 3];….;a[n, n]. Элементами побочной диагонали являются : a[1, n];a[2, n-1];a[3, n-2];…;a[n-1, 2];a[n, 1]. 6
Квадратные матрицы В качестве примера рассмотрим задачу формирования квадратной матрицы порядка n случайными числами и нахождения произведения элементов главной диагонали и суммы элементов ниже побочной диагонали. Отметим элементы главной диагонали для нахождения их произведения. 7
Квадратные матрицы И элементы ниже побочной диагонали для поиска их суммы. 8
Квадратные матрицы Const n=9; Var a : array [1..n, 1..n] of integer; I, j, s, p : integer; Beginrandomize; for i:=1 to n do begin for j:=1 to n do for j:=1 to n dobegin a[ i, j ]:=random(101); write (a[ i, j ]:6); end;writeln;endp:=1; for i:=1 to n do p:=p*a[ i, i ]; s:=0; for i:=2 to n do for j:=n-i+2 to n do s:=s+a[ i, j ]; writeln (p,s); End. 9
Транспонирование матриц В данном алгоритме транспонирования матрицы необходимо заменить строки матрицы ее столбцами, а столбцы - строками, т.е. вычислить b[ i,j ] :=a[ j,i ], где i=1,…,n; j=1,…,m. b[ i,j ] :=a[ j,i ], где i=1,…,n; j=1,…,m. Матрица АМатрица B Матрица АМатрица B
Транспонирование матриц Constn=5;m=7;Var i, j : integer; a : array [1..n,1..m] of integer; b : array [1..m,1..n] of integer; Beginrandomize; writeln (Сформирована матрица A); for i:=1 to n do begin for j:=1 to m do begin a[ i,j ]:=random(31)-15; write (a[ i,j ]:6); end;writeln();end; for i:=1 to n do for j:=1 to m do b[ j,i ]:=a[ i,j ]; writeln (Получена транспонированная матрица B); for i:=1 to m do begin begin for j:=1 to n do write(b[ i,j ]:6); writeln(); end;End. 11
Транспонирование матриц Транспонированную матрицу можно получить в исходном массива А. Для квадратной матрицы n*n для этого необходимо поменять местами каждый элемент верхнего треугольника с соответствующим элементом нижнего (диагональные элементы переставлять не нужно). При этом для каждой строки нужно выполнять перестановку для элементов, расположенных правее главной диагонали, с элементами соответствующего столбца, расположенными ниже главной диагонали. При перестановке используем вспомогательную переменную tmp, помещая в нее для временного хранения один из переставляемых элементов, чтобы не потерять его значение. 12
Транспонирование матриц Constn=9;Var i, j, tmp : integer; a : array [1..n,1..n] of integer; Beginrandomize; writeln (Сформирована квадратная матрица A); for i:=1 to n do begin for j:=1 to n do begin a[ i,j ]:=random(101)-50; write (a[ i,j ]:6); end;writeln();end; for i:=1 to n-1 do for j:=i+1 to n do begin tmp:=a[ i,j ]; a[ i,j ]:=a[ j,i ]; a[ j,i ]:=tmp; end; writeln (Получена транспонированная матрица ); for i:=1 to n do begin begin for j:=1 to n do write(a[ i,j ]:6); writeln(); end;End. 13
Удаление строки матрицы Алгоритм удаления строки является сходным с алгоритмом удаление элементов одномерного массива, за тем исключением, что операция переноса элементов выполняется для каждого столбца при переборе строк. Рассмотрим программу удаления из матрицы А заданной с клавиатуры строки T. Constn=10; m=5; Var i, j, t, n : integer; a : array [1..n,1..m] of integer; Beginrandomize; writeln (Сформирована матрица A); for i:=1 to n do begin for j:=1 to m do begin a[ i,j ]:=random(101)-50; a[ i,j ]:=random(101)-50; write (a[ i,j ]:6); write (a[ i,j ]:6);end;writeln;end; writeln (Введите номер строки для удаления); readln (t); 14
Удаление строки матрицы k:=n-1; for i:=t to k do for j:=1 to m do a[ i,j ]=a[ i+1,j ]; a[ i,j ]=a[ i+1,j ]; writeln (Получена матрица ); for i:=1 to k do begin for j:=1 to m do write (a[ i,j ]); writeln;endEnd. 15
Включение столбца в матрицу Алгоритм включения столбца в матрицу является сходным с алгоритмом включения элементов одномерного массива, за тем исключением, что операция переноса элементов выполняется для каждой строки при переборе столбцов. Рассмотрим пример, где необходимо в квадратной матрице А вставить столбец, содержащий ее элементы главной диагонали - следующим за столбцом, содержащим минимальный элемент матрицы. Для этого перепишем диагональные элементы в массив B, найдем минимальный элемент и его индекс по столбцу. Перебирая столбцы, сдвинем все столбцы на позицию вправо начиная от найденного индекса столбца минимального элемента. Занесем в следующий столбец за индексом минимального элемента - элементы столбца, которые хранятся в массиве B. 16
Включение столбца в матрицу Const n=7; Var i, j, min, j_min, m: integer; a : array [1..n,1..n+1] of integer; b : array [1..n] of integer; Beginrandomize; writeln (Сформирована матрица A); for i:=1 to n do begin for j:=1 to n do begin a[ i,j ]:=random(101); write (a[ i,j ]:6); end; b[ i ]:=a[ i,i ]; writeln; end; min:=a[1,1]; j_min:=1; for i:=1 to n do for j:=1 to n do if (a[ i,j ]
Решите задачи: Создайте квадратную матрицу размерности 5 случайными числами в диапазоне [-5;5] и найдите: сумму элементов строки номер которой введен с клавиатуры; сумму элементов главной диагонали; произведение элементов выше побочной диагонали; максимальный и минимальный элемент массива. 18