Двухмерные массивы.ppt
- Количество слайдов: 18
Двухмерным массивом называется совокупность данных, каждое значение которых зависит от двух чисел, которые можно рассматривать как индекс строки и индекс столбца в матрице. В разделе описания переменных двухмерные массивы можно описать: <имя массива>: array [<н_индекс_1>. . <в_индекс_1>, <н_индекс_2>. . <в_индекс2>] of <тип>; Первый индекс соответствует номеру строки, второй – номеру столбца. Например матрица состоящая из трех строк и четырех столбцов будет описана следующим образом: A : array [1. . 3, 1. . 4] of integer; Для ввода двухмерных массивов, так же как и одномерных можно использовать генератор случайных чисел, константы и файлы.
Матрицы, у которых число строк равно числу столбцов, называются квадратными. A(n, n) – квадратная матрица. Основные свойства квадратных матриц: 1. Квадратные матрицы имеют главную и побочную диагонали. А= 379 467 578 Если: • • Для этой матрицы на главной диагонали лежат элементы 3, 6 и 8, а на побочной 9, 6 и 5. i=j – элементы расположены на главной диагонали; i>j – элементы расположены ниже главной диагонали; i
2. Квадратная матрица, у которой все элементы, исключая элементы главной диагонали, равны нулю, называется диагональной матрицей: А= 300 010 005 3. Диагональная матрица, у которой все элементы, стоящие на главной Диагонали, равны 1, называется единичной матрицей: А= 100 010 001
4. Если в матрице А(m, n) поменять местами строки и столбцы, то Получится матрица Аt(m, n), которая называется транспонированной матрицей: A= t А = a 11 a 12 a 21 a 22 … … am 1 am 2 … … a 1 n a 2 n … amn a 11 a 21 a 12 a 22 … … a 1 n a 2 n … … a m 1 am 2 … amn
Действия выполняемые над матрицами: • Суммой однотипных матриц A(aij) и B(bij) называют матрицу C(aij+bij)=C(cij), каждый элемент которой равен сумме соответствующих элементов матриц А и В, С=А+В, cij=aij+bij • Разностью матриц A(aij) и B(bij) называют матрицу C(aij - bij)=C(cij), каждый элемент которой равен сумме соответствующих элементов матриц А и В, С=А-В, cij=aij – bij • Произведением матрицы А на некоторое число r называют матрицу A * г, у которой каждый элемент равен aij* r
• Произведением двух матриц и называется такая матрица ( число столбцов матрицы А должно равняться числу строк матрицы В), у которой элементы определяются по формуле где i=1…m, j=1…p. То есть нужно перемножить соответствующие элементы i-ой строки матрицы А на элементы j-го столбца матрицы В и полученные произведения сложить. При работе с двухмерными массивами, следует помнить о том что, как правило, для обработки массивов используются вложенные циклы
Рассмотрим некоторые алгоритмы: 1. Вывод матрицы в виде таблицы: Program prim 1; var a: array[1. . 4, 1. . 4] of integer; i, j: integer; begin for i: =1 to 4 do begin for j: =1 to 4 do begin a[i, j]: =random(10); write(a[i, j], ' '); end; writeln; end.
2. Суммирование матриц: Var a, b, c: array[1. . 4, 1. . 4] of integer; i, j: integer; begin for i: =1 to 4 do begin for j: =1 to 4 do begin a[i, j]: =random(10); write(a[i, j], ' '); end; writeln; for i: =1 to 4 do begin for j: =1 to 4 do begin b[i, j]: =random(10); write(b[i, j], ' '); end; writeln; for i: =1 to 4 do begin for j: =1 to 4 do begin c[i, j]: =a[i, j]+b[i, j]; write(c[i, j], ' '); end; writeln; end.
3. Умножение матриц var a, b, c: array[1. . 4, 1. . 4] of integer; i, j, s, k: integer; begin for i: =1 to 4 do begin for j: =1 to 4 do begin a[i, j]: =random(10); write(a[i, j], ' '); end; writeln; for i: =1 to 4 do begin for j: =1 to 4 do Begin b[i, j]: =random(10); write(b[i, j], ' '); end; writeln; for i: =1 to 4 do begin for j: =1 to 4 do begin s: =0; for k: =1 to 4 do s: =s+a[i, k]*b[k, j]; c[i, j]: =s; write(c[i, j], ' '); end; writeln; end. Задание матрицы А Задание матрицы В Умножение матриц
3. Транспонирование матриц: При транспонировании матрицы элементы, расположенные на главной диагонали исходной и транспонированной матриц, одни и те же. Транспонировать матрицу – значит зеркально отразить ее элементы относительно главной диагонали. Для этого можно ввести новый массив Следующим образом: For i: =1 to n do For j: =1 to n do b[ i, j]: =a[ i, j]; Задание 1. Самостоятельно напишите программу транспонирования матрицы. Количество строк и столбцов задается по запросу с экрана.
4. Задачи на поворот матриц. Пусть дана квадратная матрица Аnn состоящая из целых чисел. Повернем ее на 900 по часовой стрелке. Дана матрица А= Матрица после поворота: А’= Задание 2. Самостоятельно запишите соответствие между элементами матриц А и А’. Например a 11 соответствует a’ 31 и т. д.
Проанализировав соотношение между элементами матриц приходим к выводу: отношение матриц А(I, j) и A’(I’, j’) следующее i=j’, j+I’=n+1 следовательно А’(I’, j’)=A(n+1 -j, i) const n=3; var a, b: array[1. . n, 1. . n] of integer; i, j: integer; begin randomize; for i: =1 to n do begin for j: =1 to n do begin a[i, j]: =random(20); write(a[i, j]: 4); end; writeln; for i: =1 to n do begin for j: =1 to n do begin b[i, j]: =a[n+1 -j, i]; write(b[i, j]: 4); end; writeln; end.
Проведя аналогичные рассуждения получим следующие соотношения: а) при повороте на 180 градусов по часовой стрелке : j+j’=n+1; i+I’=n+1 Следовательно A’(I’, j’)=A(n+1 -I, n=1 -j). b) При отражении матрицы относительно горизонтальной оси симметрии: J=j’, i+I’=n+1, следовательно A’(I’, j’)=A(n+1 -i, j). const n=4; var a, b: array[1. . n, 1. . n] of integer; i, j: integer; begin randomize; for i: =1 to n do begin for j: =1 to n do begin a[i, j]: =random(20); write(a[i, j]: 4); end; writeln; for i: =1 to n do begin for j: =1 to n do begin b[i, j]: =a[n+1 -i, j]; write(b[i, j]: 4); end; writeln; end.
c) При зеркальном отображении элементов матрицы относительно побочной диагонали: i+j’=n+1, j+i ’=n+1, следовательно A’[i ’, j ’]=A[n+1 -j, n+1 -i] Задание 3. Напишите программу, которая позволяет: А) повернуть элементы матрицы на 90 градусов против часовой стрелки В)Отобразить элементы матрицы относительно вертикальной оси симметрии
Рассмотрим решение некоторых задач: 1. Дана матрица А 5, 5 , состоящая из случайных чисел. Составить одномерный массив S, в котором будут содержаться значения суммы элементов каждого столбца матрицы. Const n=5; Var a: array[1. . n, 1. . n] of integer; s: array[1. . n] of integer; I, j, ss: integer; Begin randomize; for i: =1 to n do begin for j: =1 to n do begin a[i, j]: =random(20); write(a[i, j]: 4); end; writeln; end; for i: =1 to n do begin ss: =0; for j: =1 to n do ss: =ss+a[i, j]; s[i]: =ss; end; writeln; for i: =1 to n do write(s[i]: 4); writeln; end.
2. Заменить все элементы двухмерного массива А целых чисел, Которые меньше среднего арифметического первого столбца, Квадратами этих элементов. Const n=5; Var a: array[1. . n, 1. . n] of integer; i, j, s: integer; sr: real; Begin randomize; for i: =1 to n do begin for j: =1 to n do begin a[i, j]: =random(20); write(a[i, j]: 4); end; writeln; end; s: =0; for i: =1 to n do s: =s+a[ i, 1]; sr: =s/n; for i: =1 to n do for j: =1 to n do if a[i, j] < sr then a[ i, j] : =sqr(a[ i , j ] ); writeln; for i: =1 to n do begin for j: =1 to n do write(s[i]: 4); writeln; end. Задание массива Нахождение суммы элементов первого столбца и среднего арифметического Формирование нового массива по заданному правилу Вывод на экран элементов массива
Задание 4. Решите самостоятельно: 1. Выведите на экран таблицу Пифагора 2. Найдите сумму положительных элементов указанного столбца матрицы А 5, 5 3. Найдите максимальную сумму абсолютных значений элементов по строкам и номер строки с такой суммой. 4. В массиве заданны целые числа. Верно ли, что сумма элементов побочной диагонали массива оканчивается цифрой 0? 5. В поезде 18 вагонов, в каждом из которых 36 мест. Информация о проданных на поезд билетах хранится в двумерном массиве, номера строк которого соответствуют номерам вагонов, а номера столбцов – номерам мест. Если билет на то или иное место продан, то соответствующий элемент массива имеет значение 1, в противном случае – 0. Составить программу, определяющую число свободных мест в любом из вагонов поезда.


