Конспект по теме: Двумерные массивы Учитель информатики Батракова Л.В. Определение: Двумерный массив- это одномерный массив, у которого типом компоненты является одномерный массив. Двумерный массив можно представить в виде квадратной или прямоугольной таблицы, состоящей из строк и столбцов. Аналогом в математике является матрица: Размер двумерного массива - количество элементов в массиве M*N, где М- число строк, N- число столбцов (натуральные числа). У любого массива должно быть имя. Пусть у массива будет имя A, тогда к любой компоненте массива можно обратиться по адресу – A[i,j] или A[i][j], где индекс i – номер строки (всегда на первом месте), а индекс j – номер столбца. Квадратная матрица – матрица с равным числом строк и столбцов. Порядок матрицы – число строк (столбцов) квадратной матрицы. Для квадратной матрицы вводятся понятия главной и побочной диагонали, которые обладают следующими свойствами: у элементов, лежащих на главной диагонали, номер строки и номер столбца совпадают, т.е. i=j. у элементов, лежащих на побочной диагонали номер строки и номер столбца связаны следующим соотношением, если i – номер строки, то номер столбца j=N-i+1. Описание двумерного массива Тип описания массива может быть задан одним из способов: 1) Type tm1=array[ti2] of tk; tm2=array[ti1] of tm1; где tm1 – тип массива, ti2 – тип индекса, tk – тип компонент одномерного массива, tm2 – тип массива, ti1 – тип индекса, tm1 – тип компонент двумерного массива Из этого описания видно, что двумерный массив – это одномерный массив, у которого компоненты – одномерный массив. 1 Конспект по теме: Двумерные массивы Учитель информатики Батракова Л.В. 2) Type tm2=array[ti1]of array[ti2] of tk; Чаще тип задается в следующем виде: 3) Type tm2=array[ti1,ti2] of tk; ti1 – задает тип индека у строки, а ti2 – тип индекса у столбца. Они могут совпадать, а могут не совпадать, но они обязательно должны относиться к простому порядковому типу (целочисленный, символьный, булевский, перечислимый, диапазон). tk – тип компонент массива может быть любим типом, кроме файлового ( простым и сложным). Так как массивы относятся к произвольным типам, то их можно описывать как через раздел TYPE так и через раздел VAR. Рассмотрим различные способы описания. Например: CONST M=10; N=20; Type m1=array[boolean] of byte; m2=array[char] of m1; m3=array[1..20, 1..5] of integer; m4= array [1..M, 1..N] of char ; m5= array [1..30] of array [1..20] of real; Var C:m2; A:m3; Mas:m4; X:m4; y: [1..5, 1..5] of integer ; F: array [1..30] of array [1..20] of real; Заполнение двумерного массива Заполнение по строкам: А[1,1] А[2,1] … А[1,2] … … А[1,3] … … А[1,4] … … А[1,5] … … Для заполнения матрицы организуется наружный цикл по i, внутренний – по j (при условии, что i- строки, j – столбцы). При этом индекс строки i меняется медленнее индекса столбца j за счет того, что происходит постепенный перебор всех элементов строки, т.е. столбцов i-й строки. Заполнение по столбцам: А[1,1] А[2,1] А[3,1] A[4,1] А[1,2] … … … … … … … … … … … … … … … Заполнение двумерного массива возможно по строкам и столбцам, каждый из элементов можно вводить: 1 с клавиатуры; Например: Write(‘Введите число строк M= ‘); readLn (M); Write(‘Введите число столбцов N= ‘); readLn (N); for i:=1 to M do begin for j:=1 to N do begin write(‘Введите элемент A[',i,',',j,']=’); read(A[i,j]); end; 2 Конспект по теме: Двумерные массивы Учитель информатики Батракова Л.В. readLn; end; 2 с помощью генератора случайных чисел; randomize; writeLn(‘Матрица А:’); FOR i:= 1 to M DO {наружный цикл по строкам} begin FOR j:=1 TO N DO {внутренний цикл по столбцам} begin A[i,j]:= random(10); write(A[i,j]:3); {печатаем подряд всю строку} end; В этих примерах заполнение показано по строкам. Если порядок выполнения циклов поменять, то заполняться массив будет по столбцам. Вывод двумерного массива осуществляется аналогичным образом. {Вывод матрицы} writeLn(‘Результирующая матрица A:’); for i:=1 to M do begin for j:=1 to N do write(A[i,j],’ ‘); writeLn; end; Примеры программ 1. Дана матрица A( N ´ M), состоящая из натуральных чисел. Определить ее максимальный элемент и его индексы. program pr_1; {Max элемент матрицы} CONST t= 10; r=10; var A: array [1..t, 1..r] of INTEGER; i,j: byte; n,m, Max, iMax, jMax: integer; BEGIN randomize; write(‘Введите число строк N=’); readLn(N); write(‘Введите число столбцов M=’); readLn(M); FOR i:= 1 to N DO {заполнение массива генерированием случайных чисел} begin FOR j:=1 TO M DO begin A[i,j]:= random(10); write(A[i,j]:3); end; writeLn; end; Max:= A[1,1]; iMax:=1; jMax:=1; {принимаем начальное значение Мах = значению 1-го эл-та} For i:=1 to N do For j:=1 to M do IF A[i,j] > Max then begin Max:= A[i,j]; iMax:=i; jMax:=j; End; WriteLn(‘Max= ’ ,Max,’ в строке: ‘,imax, ‘ столбце :’, jmax); readLn; END. 3 Конспект по теме: Двумерные массивы Учитель информатики Батракова Л.В. 2. Подсчитать суммы элементов всех строк прямоугольной целочисленной матрицы A(M*N) и занести результаты в одномерный массив S(M). Массивы распечатать. program pr_2;{сумма элементов по строкам} VAR i,j,n,m: byte; Sum:integer; A: array [1..100, 1..100] of integer; S: array[1..100] of integer; BEGIN Write(‘Введите число строк M= ‘); readLn (M); Write(‘Введите число столбцов N= ‘); readLn (N); for i:=1 to M do begin Sum := 0; {начальное значение суммы по строке} for j:=1 to N do begin write(‘Введите элемент A[',i,',',j,']=’); readLn(A[i,j]); Sum:= Sum + A[i,j]; {суммирование по строке} end; writeLn; {пропуск строки} S[i]:= Sum; {заполнение массива S} end; writeLn(‘Массив S:’); for i:=1 to m do write( S[i]:4); writeLn; readln; END. Список задач на двумерные массивы 1. Дана матрица вещественных чисел размера m x n. Найти сумму наименьших значений элементов ее строк. 2. Дана матрица вещественных чисел размера m x n. Упорядочить ее строки по убыванию суммы их элементов. 3. Даны действительная квадратная матрица порядка n и натуральные числа i,j (1<=i<=n,1<=j<=n). Из матрицы удалить i-ю строку и j-ый столбец. 4. Даны действительная квадратная матрица порядка n и натуральные числа i,j (1<=i<=n,1<=j<=n). Поменять в матрице местами i-ый и j-ый столбцы. 5. Дана целочисленная квадратная матрица порядка n. Найти номера строк, все элементы которых нули. 6. Дан двумерный массив 7 * 9 элементов. Составить одномерный массив, состоящий из минимальных элементов строк исходного двумерного массива. 7. Дан двумерный массив 8 * 1O элементов. Составить одномерный массив, состоящий из максимальных элементов столбцов исходного двумерного массива. 8. Дан двумерный массив 9 * 12 элементов. Составить одномерный массив, состоящий из отрицательных элементов столбцов исходного двумерного. 9. Дана матрица вещественных чисел размера m x n. Упорядочить ее строки по возрастанию их наибольших элементов. 10. Дана матрица вещественных чисел размера m x n. Строку, содержащую максимальный элемент массива, поменять со строкой, содержащей минимальный элемент. 11. В данной квадратной целочисленной матрице порядка n указать индексы всех элементов с наибольшим значением. 12. Дана действительная матрица размера m x n . Найти среднее арифметическое наибольшего и наименьшего значений ее элементов. 13. Дана действительная матрица размера m x n . Найти сумму наибольших значений элементов ее строк. 14. Подсчитать количество положительных элементов в каждом столбце матрицы размером m х n, элементы которой вводятся с клавиатуры. 15. Подсчитать количество отрицательных элементов в каждой строке матрицы размером m х n, элементы которой задаются с помощью датчика случайных чисел. 16. Подсчитать количество четных элементов в каждом столбце матрицы размером m х n, элементы которой задаются с помощью датчика случайных чисел. 4 Конспект по теме: Двумерные массивы Учитель информатики Батракова Л.В. 17. Подсчитать количество четных отрицательных элементов в матрице размером m х n, элементы которой вводятся с клавиатуры. 18. Найти сумму элементов в каждом столбце массива размером m х n, элементы которого задаются датчиком случайных чисел. 19. Найти произведение элементов в каждом столбце массива размером m х n, элементы которого вводятся с клавиатуры. Найти произведение элементов в каждой строке массива размером n х m, элементы которого вводятся с клавиатуры. 20. Найти произведение диагональных элементов массива размером n х m, элементы которого вводятся с клавиатуры. 5