Часть 1 Двумерный массив. Матрицы































Часть 1
Двумерный массив. Матрицы 1 В математике таблицы чисел, состоящие из строк и столбцов называются матрицами и записываются в круглых скобках.
Двумерный массив. Применение. 2 Использование двумерных массивов для построения поверхностей.
Двумерный массив. Определение. 3 Массив — это пронумерованная последовательность величин одинакового типа, обозначаемая одним именем. Элементы массива располагаются в последовательных ячейках памяти, обозначаются именем массива и индексом. Каждое из значений, составляющих массив, называется его компонентой (или элементом массива). Способ организации данных, при котором каждый элемент определяется номером строки и номером столбца, на пересечении которых он расположен, называется двумерным массивом
Двумерный массив. Определение 4 В математике: 1 2 3 4 5 6 Ai; j 1 7 4 2 7 5 4 В Pascal: 4 1 3 8 9 9 A[i, j] 2 3 1 5 0 6 0 0 A[2, 4] A[1, 2] A[3, 5]
Двумерный массив. Описание 5 Самый простой способ описания массива a : array [1. . 10, 1. . 20] of real; Количество Имя Описание как массивов: Тип строк массива данных в Количество массиве a: array [1. . 10] of array [1. . 20] of real; столбцов Каждый элемент которого в свою Одномерный очередь является массив одномерным массивом
Двумерный массив. Описание 6 Количество строк и столбцов через константу. 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;
Двумерный массив. Описание 7 Массив констант. const a: array[1. . 3, 1. . 5] of integer = ((3, -2, 1, 4, 3), (-5, -9, 0, 3, 7), Непосредственно в (-1, 2, 1, -4, 0)); программе указываем значения элементов массива.
Двумерный массив. Заполнение 8 Цикл отвечающий за перебор строк. Берем первую, вторую и так далее Заполнение массива с клавиатуры: строки For i : = 1 to 3 do begin For j : = 1 to 4 do begin write('A[ ', i, ', ', j, ']= '); readln(a[i, j]) end; Цикл отвечающий за end; перебор ячеек в каждой строке.
Двумерный массив. Заполнение 9 Блок-схема заполнения с клавиатуры: Цикл отвечающий за перебор строк. i , 1, N (Внешний цикл) j , 1, N Ввод a i , j Цикл отвечающий за перебор ячеек в каждой строке. (Внутренний цикл)
Двумерный массив. Заполнение 10 Заполнение массива случайными числами: 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; Когда i-я строка закончилась, Write без LN выводит writeln; пишем пустой элементы массива в Write. LN для end; строку перехода на новую строку
Двумерный массив. Заполнение 11 i , 1, N Цикл отвечающий за перебор строк. (Внешний цикл) j , 1, N a i , j= случайное[-10; 10] Вывод a i , j Цикл отвечающий за перебор ячеек в каждой строке. (Внутренний цикл)
Двумерный массив. Заполнение 12 Заполнение массива по правилу: i. Clr. Scr; For. Заполнить3 doпроизвольный : = 1 to begin массив Write('ВВеди (N<10) begin N = '); Readln(n); размером N j x N to 4 do по следующему For : = 1 правилу: i: =1 to j] do begin For n a[i, : =ФОРМУЛА; 11111 j: =1 to n do begin For 22222 write(a[i, j]: 6); a[i, j]: =i; Значение 33333 end; write(a[i, j]: 4); каждой ячейке элемента в 44444 writeln; end; строки равно номеру строки. 55555 end; writeln; end;
Двумерный массив. Заполнение 13 Clr. Scr; 1 2 3 4 Главная диагональ: 1 Write('ВВеди N = '); Readln(n); a 11 a 14 I=J 2 For i: =1 ato n do begin a 22 23 For a 32 a 33 n do begin j: =1 to 3 Побочная диагональ: 4 a 41 if 44 = n+1) then a[i, j]: =1 a (i+j I+J=N+1 else a[i, j]: =0; Заполнить произвольный массив размером N x N (N<10) write(a[i, j]); правилу: по следующему Если побочная end; 00001 диагональ то заполнить ячейку 1 writeln; 00010 во всех остальных 00100 случаях 0 end; 01000 10000
Двумерный массив. Заполнение 14 Ввод N i , 1, N j , 1, N Фрагмент Нет Да блок-схемы i+j=N+1 задачи заполнения a i , j= 0 a i , j= 1 побочной диагонали единицами Вывод a i , j
Двумерный массив. Заполнение 15 1 2 3 4 5 1 a 11 Удовлетворяет 2 3 a 22 неравенству 4 5 a 33 a 44 i < j a 55 Удовлетворяет неравенству i > j
Двумерный массив. Заполнение 16 1 2 3 4 5 a 15 1 2 Удовлетворяет a 24 3 4 неравенству a 33 5 a 42 i+j
Двумерный массив. Заполнение 17 Системы неравенств (i+j
Двумерный массив. Заполнение 18 Заполнить произвольный массив размером N x N (N<10) по Write('ВВеди N = '); Readln(n); следующему правилу: 00001 For i: =1 to n do begin 00011 For j: =1 to n do begin 00111 if (i+j>=n+1) and (i<=j) then a[i, j]: =1 00011 00001 else a[i, j]: =0; write(a[i, j]: 2); end; Это пересечение двух Проверяем условие множеств. Элементы принадлежности writeln; лежащие на и ниже данному множеству побочной диагонали и end; элементы лежащие на и выше главной диагонали
Двумерный массив. Сумма элементов 19 Второй. Один или два прохода по массиву? способ. Два прохода по массиву Первый способ. Один проход по массиву Заполнить двумерный массив N x N случайными числами из Write(' ВВеди N = '); Readln(n); Clr. Scr; [-10 ; 10] и найти сумму элементов массива интервала Первый проход. s: =0; Write('ВВеди NЗамечание. Заполняем массив и = '); Readln(n); выводим его на лежащих на главной диагонали. For i: =1 to n do begin s: =0; Заполняем случайными экран For j: =1 to nнужно что то сделать только Если do begin числами и выводим на For i: =1 с главной диагональю, экран to n do begin a[i, j]: =random(20)-10; то можно обойтись begin For j: =1 to n do без вложенных циклов write(a[i, j]: 4); a[i, j]: =random(20)-10; For i: =1 to n do s: =s+ a[i, i]; end; writeln; write(a[i, j]: 4); end; if (i=j) then s: =s+ a[i, j]; Второй проход. Находим сумму. For i: =1 to n do end; For j: =1 towriteln; n do И сразу же находим сумму элементов end; if (i=j) then s: =s+ a[i, j]; лежащих на главной writeln('Сумма элементов =', s: 5); диагонали
Двумерный массив. Сумма элементов 20 Ввод N Нахождение суммы элементов на главной S = 0 диагонали за один проход по массиву i , 1, N j , 1, N a i , j= случайное[-10; 10] Вывод a i , j Да i =j S =S + a i , j Нет Вывод S
Двумерный массив. Сумма элементов 21 Нахождение суммы элементов на Ввод N главной диагонали за два прохода S = 0 1 i , 1, N j , 1, N a i , j= Нет i =j случайное[-10; 10] Да Вывод a i , j S =S + a i , j 1 Вывод S
Двумерный массив. Сумма элементов 22 Нахождение суммы элементов на главной диагонали за два Ввод N прохода (в случае когда речь идет только о главной диагонали и S = 0 остальной массив не нужен) i , 1, N j , 1, N i , 1, N a i , j= случайное[-10; 10] S =S + a i , i Вывод a i , j 1 Вывод S
Двумерный массив. Минимальный элемент 23 Один или два прохода по массиву? Рассуждение второе. Заполнить двумерный массив N x N случайными числами из интервала [-10 ; 10] и найти минимальный элемент лежащий на главной диагонали.
Двумерный массив. Минимальный элемент 24 Стандартный способ без анализа задачи Write('ВВеди N = '); Readln(n); Заполняем массив Замечание. случайными числами For i: =1 to n do begin For j: =1 to n do begin В данном случае можно не бегать по всему Если встречается a[i, j]: =random(21)-10; главной массиву а пройти толькоэлемент меньше m, и по он лежит на главной write(a[i, j]: 4); вложенных циклов. диагонали, обойдясь без диагонали, то он end; становится минимальным Writeln; m: =a[1, 1]; Предполагаем, что end; минимальный For i: =2 to n do элемент стоит в m: =a[1, 1]; левом верхнем углу if (a[i, i]
Двумерный массив. Минимальный элемент 25 С анализом исходных данных задачи Если немного по рассуждать, можно увидеть, Write('ВВеди N = '); Readln(n); Предполагаем, что самое «маленькое» число, которое может m: =10; самое маленькое выдать генератор случайных чисел это 10. число 10, правая For i: =1 to n do begin Все остальные числа будут меньше его. Т. к. в граница исходного For j: =1 to n do begin интервала. условии задачи нам точно задан интервал a[i, j]: =random(21)-10; [-10 ; 10]. write(a[i, j]: 4); if (a[i, j]
Двумерный массив. Максимальный элемент в строке 26 Заполнить двумерный массив N x N случайными числами из интервала [-10 ; 10] и найти максимальный элемент в каждой строке.
Двумерный массив. Максимальный элемент в строке 27 Write('ВВеди N = '); Readln(n); Перебираем строки For i: =1 to n do в один проход, Решение begin Предполагаем, что Заполняем элемент max: =-10; самое большое число массива и выводим с анализом задачи его на экран - 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; становится максимальным
Двумерный массив. Максимальный элемент в строке 28 Ввод N Нахождение максимального i , 1, N элемента в каждой строке в один Мах = - 10 проход j , 1, N a i , j= случайное[-10; 10] Вывод a i , j Да a i , j > Max = a i , j Нет Вывод Max Конец
Двумерный массив. Максимальный элемент в строке 29 Предполагаем, что Clr. Scr; For i: =1 to n do begin Перебираем строки наибольший элемент в Стандартным способом, Write(‘Введи N = '); Readln(n); max: =a[i, 1]; каждой строке стоит на первом месте первый проход – заполнение, For i: =1 to n do begin For j: =2 to n do if (a[i, j]>max) then For j: =1 второй проход – поиск a[i, j]; to n do begin max: = максимального в строках a[i, j]: =random(21)-10; writeln('В ', i, ' строке max = ', max: 5); end; Заполняем массив и write(a[i, j]: 4); Идем по строке и если выводим его на экран end; находим элемент Вывод наибольшего больший чем writeln; максимальный, то он элемента в строке становится end; максимальным
Двумерный массив. Максимальный элемент в строке 30 Начало 1 Ввод N i , 1, N Мах = a i , 1 j , 1, N j , 2, N a i , j= Нет случайное[-10; 10] a i , j > Max Да Вывод a i , j Max = a i , j 1 Нахождение Вывод Max максимального элемента Конец в каждой строке в два прохода

