Двумерные массивы+.pptx
- Количество слайдов: 31
Часть 1
Двумерный массив. Матрицы 1 В математике таблицы чисел, состоящие из строк и столбцов называются матрицами и записываются в круглых скобках.
Двумерный массив. Применение. 2 Использование двумерных массивов для построения поверхностей.
Двумерный массив. Определение. 3 Массив — это пронумерованная последовательность величин одинакового типа, обозначаемая одним именем. Элементы массива располагаются в последовательных ячейках памяти, обозначаются именем массива и индексом. Каждое из значений, составляющих массив, называется его компонентой (или элементом массива). Способ организации данных, при котором каждый элемент определяется номером строки и номером столбца, на пересечении которых он расположен, называется двумерным массивом
Двумерный массив. Определение 4 1 2 3 4 5 6 1 7 4 2 7 5 4 2 4 1 3 8 9 9 3 В математике: Ai; j В Pascal: A[i, j] 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); Когда i-я строка end; закончилась, Write без LN выводит пишем пустой writeln; элементы массива в Write. LN для строку end; перехода на новую строку
Двумерный массив. Заполнение 11 i , 1, N j , 1, N Цикл отвечающий за перебор строк. (Внешний цикл) a i , j= случайное[-10; 10] Вывод a i , j Цикл отвечающий за перебор ячеек в каждой строке. (Внутренний цикл)
Двумерный массив. Заполнение 12 Заполнение массива по правилу: For. Заполнить3 doпроизвольный i. Clr. Scr; : = 1 to begin массив Write('ВВеди (N<10) begin N = '); Readln(n); размером N j x N to 4 do по следующему For : = 1 For n правилу: i: =1 to j] do begin a[i, : =ФОРМУЛА; 11111 j: =1 to n do begin For write(a[i, j]: 6); Значение 22222 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 Главная диагональ: a 11 a 14 1 Write('ВВеди N = '); Readln(n); I=J a 22 23 2 For i: =1 ato n do begin Побочная диагональ: For a 32 a 33 n do begin j: =1 to 3 4 a 41 I+J=N+1 if 44 = n+1) then a[i, j]: =1 a (i+j else a[i, j]: =0; Заполнить произвольный массив размером N x N (N<10) write(a[i, j]); правилу: по следующему Если побочная диагональ то 00001 end; заполнить ячейку 1 00010 во всех остальных writeln; случаях 0 00100 end; 010000
Двумерный массив. Заполнение 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 2 3 4 5 Удовлетворяет неравенству a 11 a 22 a 33 i < j a 44 a 55 Удовлетворяет неравенству i > j
Двумерный массив. Заполнение 16 1 2 3 4 5 a 15 Удовлетворяет неравенству 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; Если do begin числами и выводим на For j: =1 to nнужно что то сделать только For i: =1 с главной диагональю, экран to n do begin a[i, j]: =random(20)-10; For j: =1 to n do без вложенных циклов то можно обойтись begin write(a[i, j]: 4); a[i, j]: =random(20)-10; For i: =1 to n do s: =s+ a[i, i]; end; write(a[i, j]: 4); writeln; Второй проход. if (i=j) then s: =s+ a[i, j]; end; Находим сумму. 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 =S + a i , j
Двумерный массив. Сумма элементов 21 Ввод N Нахождение суммы элементов на главной диагонали за два прохода S = 0 1 i , 1, N j , 1, N a i , j= случайное[-10; 10] Вывод a i , j Нет i =j Да S =S + a i , j 1 Вывод S
Двумерный массив. Сумма элементов 22 Ввод N S = 0 Нахождение суммы элементов на главной диагонали за два прохода (в случае когда речь идет только о главной диагонали и остальной массив не нужен) i , 1, N j , 1, N a i , j= случайное[-10; 10] i , 1, N 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 Нет 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); write(a[i, j]: 4); end; Идем по строке и если Заполняем массив и находим элемент выводим его на экран end; больший чем Вывод наибольшего writeln; максимальный, то он элемента в строке становится end; максимальным
Двумерный массив. Максимальный элемент в строке 30 Начало 1 Ввод N i , 1, N Мах = a i , 1, N j , 2, N j , 1, N a i , j= случайное[-10; 10] Вывод a i , j Нет a i , j > Max Да Max = a i , j 1 Нахождение максимального элемента в каждой строке в два прохода Вывод Max Конец