Презентация "Двумерные массивы"

Подписи к слайдам:
  • Двумерные
  • массивы
  • Автор: учитель информатики МКОУ Плесской средней общеобразовательной школы
  • Юдин Андрей Борисович
  • Часть 1
  • В математике таблицы чисел, состоящие из строк и столбцов называются матрицами и записываются в круглых скобках.
  • Двумерный массив. Матрицы 1
  • Двумерный массив. Применение. 2
  • Использование двумерных массивов для построения поверхностей.
  • Двумерный массив. Определение. 3
  • Массив — это пронумерованная последовательность величин одинакового типа, обозначаемая одним именем. Элементы массива располагаются в последовательных ячейках памяти, обозначаются именем массива и индексом. Каждое из значений, составляющих массив, называется его компонентой  (или элементом массива).
  • Способ организации данных, при котором каждый элемент определяется номером строки и номером столбца, на пересечении которых он расположен, называется двумерным массивом
  • Двумерный массив. Определение 4
  • 7
  • 4
  • 2
  • 7
  • 5
  • 4
  • 4
  • 1
  • 3
  • 8
  • 9
  • 9
  • 1
  • 5
  • 0
  • 6
  • 0
  • 0
  • 1 2 3 4 5 6
  • 1
  • 2
  • 3
  • В математике:
  • В Pascal:
  • Ai;j
  • A[i,j]
  • 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));
  • Массив констант.
  • Непосредственно в программе указываем значения элементов массива.
  • For i := 1 to 3 do begin
  • For j := 1 to 4 do
  • begin
  • write('A[ ', i, ', ',j, ']= ');
  • readln(a[i, j])
  • end;
  • Двумерный массив. Заполнение 8
  • Заполнение массива с клавиатуры:
  • Цикл отвечающий за перебор строк. Берем первую, вторую и так далее строки
  • Цикл отвечающий за перебор ячеек в каждой строке.
  • end;
  • Двумерный массив. Заполнение 9
  • j , 1, N
  • Ввод a i , j
  • i , 1, N
  • Блок-схема заполнения с клавиатуры:
  • Цикл отвечающий за перебор строк. (Внешний цикл)
  • Цикл отвечающий за перебор ячеек в каждой строке. (Внутренний цикл)
  • Двумерный массив. Заполнение 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;
  • writeln;
  • end;
  • Write без LN выводит элементы массива в строку
  • Когда i-я строка закончилась, пишем пустой WriteLN для перехода на новую строку
  • Двумерный массив. Заполнение 11
  • j , 1, N
  • Вывод a i , j
  • i , 1, N
  • a i , j=
  • случайное[-10;10]
  • Цикл отвечающий за перебор строк. (Внешний цикл)
  • Цикл отвечающий за перебор ячеек в каждой строке. (Внутренний цикл)
  • Двумерный массив. Заполнение 12
  • Заполнение массива по правилу:
  • For i := 1 to 3 do begin
  • For j := 1 to 4 do begin
  • a[i, j] :=ФОРМУЛА;
  • write(a[i, j]:6);
  • end;
  • writeln;
  • end;
  • Заполнить произвольный массив размером N x N (N<10) по следующему правилу:
  • 11111
  • 22222
  • 33333
  • 44444
  • 55555
  • 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;
  • Значение элемента в каждой ячейке строки равно номеру строки.
  • Двумерный массив. Заполнение 13
  • a11
  • a22
  • a23
  • a32
  • a33
  • a14
  • a41
  • a44
  • 1 2 3 4
  • 1
  • 2
  • 3
  • 4
  • Главная диагональ:
  • I=J
  • Побочная диагональ:
  • I+J=N+1
  • Заполнить произвольный массив размером
  • N x N (N<10) по следующему правилу:
  • 00001
  • 00010
  • 00100
  • 01000
  • 10000
  • 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
  • Двумерный массив. Заполнение 14
  • Фрагмент блок-схемы задачи заполнения побочной диагонали единицами
  • j , 1, N
  • Вывод a i , j
  • i , 1, N
  • a i , j= 0
  • Ввод N
  • i+j=N+1
  • a i , j= 1
  • Да
  • Нет
  • Двумерный массив. Заполнение 15
  • a11
  • a22
  • a33
  • a44
  • a55
  • Удовлетворяет неравенству
  • i < j
  • Удовлетворяет неравенству
  • i > j
  • 1
  • 2
  • 3
  • 4
  • 5
  • 1 2 3 4 5
  • Двумерный массив. Заполнение 16
  • a15
  • a24
  • a33
  • a42
  • a51
  • Удовлетворяет неравенству
  • i+j<n+1
  • Удовлетворяет неравенству
  • i+j>n+1
  • 1 2 3 4 5
  • 1
  • 2
  • 3
  • 4
  • 5
  • Двумерный массив. Заполнение 17
  • a11
  • a22
  • a33
  • a44
  • a55
  • 1
  • 2
  • 3
  • 4
  • 5
  • 1 2 3 4 5
  • a42
  • a51
  • a24
  • a15
  • (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)
  • Системы неравенств
  • Двумерный массив. Заполнение 18
  • Заполнить произвольный массив размером N x N (N<10) по следующему правилу:
  • 00001
  • 00011
  • 00111
  • 00011
  • 00001
  • Это пересечение двух множеств. Элементы лежащие на и ниже побочной диагонали и элементы лежащие на и выше главной диагонали
  • 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;
  • Проверяем условие принадлежности данному множеству
  • Двумерный массив. Сумма элементов 19
  • Заполнить двумерный массив N x N случайными числами из интервала [-10 ; 10] и найти сумму элементов массива лежащих на главной диагонали.
  • Один или два прохода по массиву?
  • Первый способ. Один проход по массиву
  • ClrScr;
  • 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);
  • if (i=j) then s:=s+ a[i,j];
  • end;
  • writeln;
  • end;
  • writeln('Сумма элементов =',s:5);
  • Заполняем случайными числами и выводим на экран
  • И сразу же находим сумму элементов лежащих на главной диагонали
  • Второй способ. Два прохода по массиву
  • 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);
  • Первый проход. Заполняем массив и выводим его на экран
  • Второй проход. Находим сумму.
  • Замечание.
  • Если нужно что то сделать только
  • с главной диагональю,
  • то можно обойтись без вложенных циклов
  • For i:=1 to n do s:=s+ a[i,i];
  • Двумерный массив. Сумма элементов 20
  • j , 1, N
  • Вывод a i , j
  • i , 1, N
  • a i , j=
  • случайное[-10;10]
  • Ввод N
  • S = 0
  • i = j
  • S =S + a i , j
  • Вывод S
  • Да
  • Нет
  • Нахождение суммы элементов на главной диагонали за один проход по массиву
  • Двумерный массив. Сумма элементов 21
  • j , 1, N
  • Вывод a i , j
  • i , 1, N
  • a i , j=
  • случайное[-10;10]
  • Ввод N
  • S = 0
  • 1
  • 1
  • j , 1, N
  • i , 1, N
  • i = j
  • S =S + a i , j
  • Вывод S
  • Да
  • Нет
  • Нахождение суммы элементов на главной диагонали за два прохода
  • Двумерный массив. Сумма элементов 22
  • j , 1, N
  • Вывод a i , j
  • i , 1, N
  • a i , j=
  • случайное[-10;10]
  • Ввод N
  • S = 0
  • 1
  • i , 1, N
  • S =S + a i , i
  • Вывод 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;
  • 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, и он лежит на главной диагонали, то он становится минимальным
  • Замечание.
  • В данном случае можно не бегать по всему
  • массиву а пройти только по главной диагонали, обойдясь без вложенных циклов.
  • m:=a[1,1];
  • For i:=2 to n do
  • if (a[i,i]<m) then m:=a[i,i];
  • Двумерный массив. Минимальный элемент 25
  • Если немного по рассуждать, можно увидеть, что самое «маленькое» число, которое может выдать генератор случайных чисел это 10. Все остальные числа будут меньше его. Т.к. в условии задачи нам точно задан интервал
  • [-10 ; 10].
  • С анализом исходных данных задачи
  • 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, правая граница исходного интервала.
  • Заполняем, выводим на экран и сразу проверяем на минимальность в главной диагонали.
  • Двумерный массив . Максимальный элемент в строке 26
  • Заполнить двумерный массив N x N случайными числами из интервала [-10 ; 10] и найти максимальный элемент в каждой строке.
  • Двумерный массив. Максимальный элемент в строке 27
  • 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;
  • Решение в один проход,
  • с анализом задачи
  • Предполагаем, что самое большое число - 10, левая граница исходного интервала.
  • Перебираем строки
  • Заполняем элемент массива и выводим его на экран
  • Если в строке встречается элемент больше максимального, то он становится максимальным
  • Выводим наибольший элемент в строке
  • Двумерный массив. Максимальный элемент в строке 28
  • j , 1, N
  • Вывод a i , j
  • i , 1, N
  • a i , j=
  • случайное[-10;10]
  • Ввод N
  • Мах = - 10
  • a i , j > Max
  • Max = a i , j
  • Вывод Max
  • Да
  • Нет
  • Нахождение максимального элемента в каждой строке в один проход
  • Конец
  • Двумерный массив. Максимальный элемент в строке 29
  • ClrScr;
  • 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;
  • Заполняем массив и выводим его на экран
  • 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;
  • Перебираем строки
  • Предполагаем, что наибольший элемент в каждой строке стоит на первом месте
  • Идем по строке и если находим элемент больший чем максимальный, то он становится максимальным
  • Вывод наибольшего элемента в строке
  • Стандартным способом,
  • первый проход – заполнение,
  • второй проход – поиск
  • максимального в строках
  • Двумерный массив. Максимальный элемент в строке 30
  • j , 1, N
  • Вывод a i , j
  • i , 1, N
  • a i , j=
  • случайное[-10;10]
  • Ввод N
  • 1
  • j , 2, N
  • i , 1, N
  • Мах = a i , 1
  • a i , j > Max
  • Max = a i , j
  • Вывод Max
  • Да
  • Нет
  • 1
  • Начало
  • Конец
  • Нахождение максимального элемента в каждой строке в два прохода