Двумерные массивы Матрица
Содержание: Повторение Двумерный массив Диагональ матрицы Действия со строками и столбцами матрицы Действия со строками и столбцами матрицы
Повторение: Дайте определение одномерному массиву Линейный массив - это упорядоченная совокупность данных одного типа, адресующихся с помощью индекса. Какой порядок выполнения вложенных циклов ? Для каждого параметра внешнего цикла, параметр внутреннего цикла принимает все его значения
Повторение: что выведет на экран, приведённая ниже программа? Program gr1; var i,j:integer; begin for i:=1 to 5 do begin for j:=1 to 7 do write (i+j+10,' '); writeln end; end
Что выведет на экран, приведённая ниже программа? Program gr2; var i,j:integer; begin for i:=1 to 5 do begin for j:=1 to 5 do write ((j+10),' '); writeln end; end
Что выведет на экран, приведённая ниже программа? Program gr3; var i,j:integer; begin for i:=1 to 7 do begin for j:=1 to 3 do write ((j-i)+10,' '); writeln end; end
Матрица Прямоугольные таблицы отличаются тем, что их элементы расположены не в строку, а в виде таблицы. В литературе они называются прямоугольными таблицами или квадратными таблицами или матрицами. Матрица– это упорядоченная совокупность данных одного типа, адресующихся с помощью 2 -х индексов. Каждый элемент матрицы находится на пересечении строки и столба и адресуется с помощью номера строки – это первый индекс, и номера столбца – это второй индекс. Про матрицу, имеющую М строк и N столбцов, говорят, что это матрица размером М N. Если М=N, то это квадратная матрица.
Формат описания матриц в разделе переменных: var имя матрицы : array [номер 1-ой строки..номер последней строки, номер 1-ого столбца.. номер последнего столбца ] of тип данных;
Пример: Пример : var matr: array [1..3, 1..4] of real; В примере описан массив matr имеющий 3 строки и 4 столбца. Рассмотрим этот массив. Элемент matr[2,3]=5,73. Назовите индекс 7, 97, 3,5.
Обработка элементов матрицы Для доступа к каждому элементу массива требуется пользоваться вложенными циклами. Причём внешний цикл обычно содержит переменную i, обозначающую строки, а внутренний цикл переменную j, обозначающую столбцы.
Ввод и вывод элементов матрицы с клавиатуры Фрагмент программы, предназначенный для ввода матрицы по строкам имеет вид: for i:=1 to 3 do for j:=1 to 4 do read (matr[ i, j ]); В этой программе для каждого i ( номера строки) переменная j (номер столбца) принимает значение от 1 до 4. Для вывода матрицы по строкам используется следующая структура: for i:=1 to 3 do begin for j:=1 to 4 do write ( matr[ i, j ]) ; writeln; end;
Заполнение матрицы при помощи датчика случайных чисел. program sapmas1; var a:array[1..3,1..3] of integer; i,j,d:integer; begin writeln ('Заполнение массива); randomize; d:=100; For i:=1 to 3 do begin For j:=1 to 3 do begin a[i,j]:=random(d); write(a[i,j],' '); end; writeln;end; end.
Пример: Дан матрица, размером 3*4. Найти сумму элементов матрицы. program matricha; var X: array[1..3, 1..4] of integer; i,j,s: integer; begin randomize; For i:=1 to 3 do begin For j:=1 to 4 do begin x[i,j]:=random(20); write(x[i,j],' '); end; writeln; end; S:=0; For i:=1 To 3 Do For j:=1 To 4 Do S:= S + x[ i, j]; Writeln( Сумма элементов матрицы равна, S); end.
ПРАКТИЧЕСКОЕ ЗАДАНИЕ: 1. Дана матрица размером 3*2. Найти произведение элементов матрицы. (1 балл) 2. Дана матрица размером 4*4. Найти среднее значение элементов массива. {Найти номер элемента массива совпадающего со средним}. (2 балла) 3. Дана матрица размером 3*5. Найти количество элементов матрицы больших 0, меньших 0 и равных 0. (2 балла) 4. Дана матрица размером 4*4. Найти сумму чётных и нечётных элементов таблицы. (1 балл) 5. Дана матрица размером 5*2. Разделить все элементы матрицы на минимальный элемент. (2 балла) 6. Дана матрица размером 4*4. Найти наибольший элемент Найти номер строки и номер столбца, на пересечении которых он находится. (3 балла)
Найдите ошибки в приведенной ниже программе: Дана матрица размером 5*3. Найти среднее значение элементов матрицы. Program osh; Var M:array[1..3,1..5]of integer; I,j,s,sr:integer; Begin Randomize; s:=0; For i:=1 to 5 do begin For j:=1 to 3 do begin M:=random(100); Writeln(a[i], ); writeln; end; end; For i:=1 to 5 do For J:=1 to 3 do Sr:=s+a[i]/8; For i:=1 to 5 do writeln(sr); end.
Понятие диагонали массива Понятие диагонали массива применимо только к квадратному массиву. А[1,1]А[1,2]А[1,3]А[1,4] А[2,1]А[2,2]А[2,3]А[2,4] А[3,1]А[3,2]А[3,3]А[3,4] А[4,1]А[4,2]А[4,3]А[4,4] A Главная диагональ Все элементы, стоящие на главной диагонали характеризуются следующим свойством i=j
Побочная диагональ А[1,1]А[1,2]А[1,3]А[1,4] А[2,1]А[2,2]А[2,3]А[2,4] А[3,1]А[3,2]А[3,3]А[3,4] А[4,1]А[4,2]А[4,3]А[4,4] A Все элементы, стоящие на побочной диагонали характеризуются следующим свойством i=N-j+1, где N размерность массива
ПРАКТИЧЕСКОЕ ЗАДАНИЕ: Заменить значения всех элементов главной диагонали на нулевые Заменить все значения побочной диагонали на значения, равные 100 Определить среднее значение элементов побочной диагонали Определить, является ли квадратная матрица симметричной, относительно главной (побочной) диагонали. В квадратном массиве выделим 4 четверти, ограниченные главной и побочной диагоналями (без учёта элементов, расположенных на диагоналях):верхнюю, нижнюю, левую и правую. Найти сумму элементов: а) верхней четверти; б) правой четверти; в) нижней четверти; г) левой четверти. Поменять местами элементы: А) верхней и нижней четверти Б) правой и левой четверти. Все задачи по 1 баллу
Действия над строками и столбцами матрицы Для обозначения элементов одного столбца используется запись Х[ i, N], где Х имя матрицы, i (переменная)- номер строки, N(константа) - номер данного столбца. Для обозначения элементов одной строки используется запись Х[N,j ], где Х имя матрицы, N(константа) - номер данной строки, j(переменная) - номер столбца.
Пример 1: Дана матрица 4*4. Найти сумму элементов в каждом столбце. program sumst var i,j : integer; a: array [1..4,1..4] of integer; s: array [1..4] of integer; begin Randomize; For i:=1 to 4 do begin For j:=1 to 4 do begin А[I,j]:=random(20); Write(a[I,j], ); end; writeln; end; for i:=1 to 4 do s[i]:=0; for j:=1 to 4 do begin for i:=1 to 4 do s[j]:=s[j]+a[i,j]; writeln(s[j]); end; end.
Пример 2:Найти сумму элементов в каждой строке. program sumst;{нахождение суммы элементов матрицы по строкам} var i,j : integer; a: array [1..4,1..4] of integer; s: array [1..4] of integer; begin For i:=1 to 4 do begin For j:=1 to 4 do begin А[I,j]:=random(20); Write(a[I,j], ); end; writeln; end; for i:=1 to 4 do s[i]:=0; for i:=1 to 4 do begin for j:=1 to 4 do s[i]:=s[i]+a[i,j]; write(' ',s[i]); end; end.
ПРАКТИЧЕСКОЕ ЗАДАНИЕ: 1. Дана матрица размером 4*4. Найти сумму элементов строки, в которой располагается элемент с наименьшим значением. ( 2 балла) 2. Дана матрица размером 4*6. Определить матрицу в[1..4] элементы которой равны соответственно: ( 4 балла) – произведениям элементов строк; – наименьшим значениям элементов строк; – значениям средних арифметических элементов строк; – разности наибольших и наименьших элементов строк. 3. Дана матрица размером 4*4. Найти сумму наибольших значений элементов её строк. ( 2 балла) 4. Дана матрица размером 3*5. Умножить все элементы строки на 10 в которой находится максимальный элемент. ( 2 балла) 5. Дана матрица размером 4*4. Найти в каждой строке наименьший элемент и затем среди этих элементов вывести наименьший элемент.( 2 балла) 6. Дана матрица размером 4*4. Получить последовательность в 1..в 4, где каждый элемент это : – сумма наименьшего и наибольшего элементов каждой строки; – число отрицательных элементов в каждой строке; – произведение квадратов тех элементов строки, модули которых лежат в диапазоне (1...5). ( 4 балла)