Двумерные массивы Автор: учитель информатики МКОУ Плесской средней общеобразовательной школы Юдин Андрей Борисович
В математике таблицы чисел, состоящие из строк и столбцов называются матрицами и записываются в круглых скобках.
Использование двумерных массивов для построения поверхностей.
Массив — это пронумерованная последовательность величин одинакового типа, обозначаемая одним именем. Элементы массива располагаются в последовательных ячейках памяти, обозначаются именем массива и индексом. Каждое из значений, составляющих массив, называется его компонентой (или элементом массива). Способ организации данных, при котором каждый элемент определяется номером строки и номером столбца, на пересечении которых он расположен, называется двумерным массивом
В математике: Ai;jВ Pascal:A[i,j] A[2,4] A[3,5] A[1,2]
Самый простой способ описания массива a : array [1..10, 1..20] of real; Имя массива Описание как массив массивов: Количество строк Тип данных в массиве a: array [1..10] of array [1.. 20] of real;Одномерный массив Каждый элемент которого в свою очередь является одномерным массивом
Количество строк и столбцов через константу. Const m=10; n =20;Var a : array [1.. m, 1.. n] of integer; В разделе констант указываем число строк и столбцов Определяем пользовательский тип , двумерный массив Определением нового типа данных. type t=array[1..m,1..n] of integer; var a : t;
Массив констант. const a: array[1..3,1..5] of integer = ((3,-2,1,4,3), (-5,-9,0,3,7), (-1,2,1,-4,0)); Непосредственно в программе указываем значения элементов массива.
Цикл отвечающий за перебор строк. Берем первую, вторую и так далее строки For i := 1 to 3 do begin For j := 1 to 4 do begin write('A[ ', i, ', ',j, ']= '); readln(a[i, j]) end; Цикл отвечающий за перебор ячеек в каждой строке.
Блок-схема заполнения с клавиатуры: Цикл отвечающий за перебор строк. (Внешний цикл) Цикл отвечающий за перебор ячеек в каждой строке. (Внутренний цикл)
Заполнение массива случайными числами: For i := 1 to 3 do begin For j := 1 to 4 do begin a[i, j] := random(21) - 10; write(a[i, j]:6); end; writeln; end; Когда i-я строка закончилась, пишем пустой WriteLN для перехода на новую строку
Цикл отвечающий за перебор строк. (Внешний цикл) Цикл отвечающий за перебор ячеек в каждой строке. (Внутренний цикл)
Заполнение массива по правилу: ClrScr; Write('ВВеди N = ');Readln(n); For i:=1 to n do begin For j:=1 to n do begin a[i,j]:=i; write(a[i,j]:4); end; writeln; end; Заполнить произвольный массив размером N x N (N<10) по следующему правилу:1111122222333334444455555 Значение элемента в каждой ячейке строки равно номеру строки.
ClrScr; Write('ВВеди N = ');Readln(n); For i:=1 to n do begin For j:=1 to n do begin if (i+j = n+1) then a[i,j]:=1 else a[i,j]:=0; write(a[i,j]); end; writeln; end; Если побочная диагональ то заполнить ячейку 1 во всех остальных случаях 0
Фрагмент блок-схемы задачи заполнения побочной диагонали единицами
Удовлетворяет неравенствуi < j Удовлетворяет неравенствуi > j
Удовлетворяет неравенствуi+j<n+1 Удовлетворяет неравенствуi+j>n+1
Системы неравенств (i+j<n+1) And (i<j) (i+j<n+1) And (i>j) (i+j>n+1) And (i<j) (i+j>n+1) And (i>j)
Write('ВВеди N = '); Readln(n); For i:=1 to n do begin For j:=1 to n do begin if (i+j>=n+1) and (i<=j) then a[i,j]:=1 else a[i,j]:=0; write(a[i,j]:2); end; writeln; end;
Замечание.Если нужно что то сделать только с главной диагональю, то можно обойтись без вложенных цикловFor i:=1 to n do s:=s+ a[i,i]; Второй способ. Два прохода по массивуWrite(' ВВеди N = ');Readln(n); s:=0; For i:=1 to n do begin For j:=1 to n do begin a[i,j]:=random(20)-10; write(a[i,j]:4); end; writeln; end; For i:=1 to n do For j:=1 to n do if (i=j) then s:=s+ a[i,j]; writeln('Сумма элементов =',s:5);
Нахождение суммы элементов на главной диагонали за один проход по массиву
Нахождение суммы элементов на главной диагонали за два прохода
Нахождение суммы элементов на главной диагонали за два прохода (в случае когда речь идет только о главной диагонали и остальной массив не нужен)
Заполнить двумерный массив N x N случайными числами из интервала [-10 ; 10] и найти минимальный элемент лежащий на главной диагонали.
Стандартный способ без анализа задачиWrite('ВВеди N = ');Readln(n); For i:=1 to n do begin For j:=1 to n do begin a[i,j]:=random(21)-10; write(a[i,j]:4); end; Writeln; end; m:=a[1,1]; For i:=1 to n do For j:=1 to n do if (a[i,j]<m) and (i=j) then m:=a[i,j]; writeln(' Минимальный элемент =',m:5); Замечание.В данном случае можно не бегать по всему массиву а пройти только по главной диагонали, обойдясь без вложенных циклов.m:=a[1,1];For i:=2 to n do if (a[i,i]<m) then m:=a[i,i];
С анализом исходных данных задачиWrite('ВВеди N = ');Readln(n); m:=10; For i:=1 to n do begin For j:=1 to n do begin a[i,j]:=random(21)-10; write(a[i,j]:4); if (a[i,j]<m) and (i=j) then m:=a[i,j]; end; Writeln; end; writeln(' Минимальный элемент лежащий на главной диагонали =',m:5); Заполняем, выводим на экран и сразу проверяем на минимальность в главной диагонали. Предполагаем, что самое маленькое число 10, правая граница исходного интервала.
Заполнить двумерный массив N x N случайными числами из интервала [-10 ; 10] и найти максимальный элемент в каждой строке.
Write('ВВеди N = ');Readln(n); For i:=1 to n do begin max:=-10; For j:=1 to n do begin a[i,j]:=random(21)-10; write(a[i,j]:4); if (a[i,j]>max) then max:= a[i,j]; end; write(' MAx = ',max:5); writeln; end; Решение в один проход, с анализом задачи Заполняем элемент массива и выводим его на экран Перебираем строки Выводим наибольший элемент в строке Если в строке встречается элемент больше максимального, то он становится максимальным
Нахождение максимального элемента в каждой строке в один проход
Стандартным способом, первый проход – заполнение, второй проход – поиск максимального в строках For i:=1 to n do begin max:=a[i,1]; For j:=2 to n do if (a[i,j]>max) then max:= a[i,j]; writeln('В ',i,' строке max = ',max:5); end; Предполагаем, что наибольший элемент в каждой строке стоит на первом месте Вывод наибольшего элемента в строке Идем по строке и если находим элемент больший чем максимальный, то он становится максимальным
Нахождение максимального элемента в каждой строке в два прохода