Разделы презентаций


Двумерные массивы

Содержание

Массивы, положение элементов в которых описывается двумя индексами, называются двумерными. Их можно представить в виде прямоугольной таблицы или матрицы.

Слайды и текст этой презентации

Слайд 1ДВУМЕРНЫЕ МАССИВЫ

ДВУМЕРНЫЕ МАССИВЫ

Слайд 2Массивы, положение элементов в которых описывается двумя индексами, называются двумерными.



Их можно представить в виде прямоугольной таблицы или матрицы.

Массивы, положение элементов в которых описывается двумя индексами, называются двумерными. Их можно представить в виде прямоугольной таблицы

Слайд 3Рассмотрим матрицу А размером 2х3, то есть в ней будет

две строки, а в каждой строке по три элемента:

Рассмотрим матрицу А  размером 2х3,  то есть в ней будет две строки,  а в

Слайд 4Каждый элемент имеет свой номер, как у одномерных массивов, но

сейчас номер уже состоит из двух чисел – номера строки,

в которой находится элемент, и номера столбца.
Таким образом, номер элемента определяется пересечением строки и столбца.
Например, а12 – это элемент, стоящий в первой строке и во втором столбце.
Каждый элемент имеет свой номер, как у одномерных массивов, но сейчас номер уже состоит из двух чисел

Слайд 5Существует несколько способов объявления двумерного массива.
Способ 1. Двумерный массив можно

описать как одномерный, элементами которого являются одномерные массивы. Например, для

матрицы А, приведенной выше:
Const n=2; m=3;
type mas1=array[1..m] of <тип эл-тов, напр-р, real>;
mas2=array[1..n] of mas1;
var v: mas1; a: mas2;
В данном случае переменная v объявлена как одномерный массив из 3-х элементов вещественного типа. Переменная а описана как двумерный массив из 2-х строк, в каждую из которых включено по три элемента.
Существует несколько способов объявления двумерного массива.Способ 1. Двумерный массив можно описать как одномерный, элементами которого являются одномерные

Слайд 6Способ 2.
Описание массива А можно сократить, исключив определение типа mas1

в определении типа mas2:

const n=2; m=3;
type massiv=array[1..n] of [1..m] of

<тип эл-тов>;
var a: massiv;
Способ 2.Описание массива А можно сократить, исключив определение типа mas1 в определении типа mas2:	const n=2; m=3;	type massiv=array[1..n]

Слайд 7Способ 3.
Еще более краткое описание массива А можно получить, указывая

имя массива и диапазоны изменения индексов для каждой размерности массива:

const

n=2; m=3;
type massiv=array[1..n,1..m] of <тип эл-тов>;
var a: massiv;
Способ 3.Еще более краткое описание массива А можно получить, указывая имя массива и диапазоны изменения индексов для

Слайд 8Если указанный тип используется для определения одного массива в программе,

то удобно объявление массива в разделе описания переменных:

var a: array[1..n,1..m]

of <тип эл-тов>
Если указанный тип используется для определения одного массива в программе, то удобно объявление массива в разделе описания

Слайд 9Поскольку положение элемента в двумерном массиве описывается двумя индексами (первый

– номер строки, второй – номер столбца), программы большинства матричных

задач строятся на основе вложенных циклов.
Обычно внешний цикл работает по строкам матрицы, то есть с его помощью выбирается требуемая строка матрицы, а внутренний цикл – по столбцам матрицы, то есть здесь выбирается нужный элемент из выбранной уже строки.
Поскольку положение элемента в двумерном массиве описывается двумя индексами (первый – номер строки, второй – номер столбца),

Слайд 10Формирование двумерного массива можно осуществлять всеми тремя способами, описанными для

одномерных массивов, то есть
ввод с клавиатуры,
через генератор случайных

чисел или
с помощью файла.
Формирование двумерного массива можно осуществлять всеми тремя способами, описанными для одномерных массивов, то есть ввод с клавиатуры,

Слайд 11Предположим, нам нужно пробежать всю матрицу.
Вот фрагмент программы, выводящий матрицу

на экран:
for i:=1 to n do
begin
for j:=1 to

m do
write (a[i,j]:4);
writeln
end;
Предположим, нам нужно пробежать всю матрицу.Вот фрагмент программы, выводящий матрицу на экран:	for i:=1 to n do		begin

Слайд 12Задача 1.
Найти сумму всех элементов двумерного массива.

Задача 1. Найти сумму всех элементов двумерного массива.

Слайд 13Program prim1;
uses crt;
type mas=array[1..100,1..100] of integer;
var a:mas;
i,j,n,m,s:integer;
begin

clrscr;
randomize;
write (‘n=‘); readln (n); write

(‘m=‘); readln (m);
for i:=1 to n do
begin
for j:=1 to m do
begin
{получаем случайные значения элементов матрицы}
a[i,j]:=random(45)-22; write (a[i,j]:4);
{находим сумму элементов}
s:=s+a[i,j];
end;
writeln;
end;
{печатаем сумму всех эл-тов}
writeln (‘summa vsech elem. =‘, s);
readln;
end.
Program prim1;uses crt;type mas=array[1..100,1..100] of integer;var a:mas;   i,j,n,m,s:integer;begin  clrscr;  randomize;  write (‘n=‘);

Слайд 14Задача 2.
В предыдущей задаче найти не только сумму всех элементов,

но и сумму элементов каждой строки.

Задача 2.В предыдущей задаче найти не только сумму всех элементов, но и сумму элементов каждой строки.

Слайд 15Program prim1;
uses crt;
type mas=array[1..100,1..100] of integer;
var a:mas;
i,j,n,m,s,s1:integer;
begin

clrscr;
randomize;
write (‘n=‘); readln (n); write

(‘m=‘); readln (m);
for i:=1 to n do begin
for j:=1 to m do begin
{получаем случайные значения элементов матрицы}
a[i,j]:=random(45)-22; write (a[i,j]:4);
{находим сумму элементов}
s:=s+a[i,j]; s1:=s1+a[i,j];
end;
{печатаем сумму всех эл-тов каждой строки и обнуляем значение суммы}
writeln(‘summa stroki =‘,s); s:=0;
writeln;
end;
writeln (‘summa vsech elem. s1=‘, s1);
readln;
end.
Program prim1;uses crt;type mas=array[1..100,1..100] of integer;var a:mas;   i,j,n,m,s,s1:integer;begin  clrscr;  randomize;  write (‘n=‘);

Слайд 16Задача 3:
Найти минимальный элемент матрицы и его порядковый номер.

Задача 3:Найти минимальный элемент матрицы и его порядковый номер.

Слайд 17Задача 4:
Найти максимальный элемент каждой строки массива и его индексы.
Найти

максимальный элемент всего массива и его индекс (самостоятельно)

Задача 4:Найти максимальный элемент каждой строки массива и его индексы.Найти максимальный элемент всего массива и его индекс

Слайд 18Program prim4;
uses crt;
type mas=array[1..100,1..100] of integer;
var a: mas;

i,j,n,max,i1,j1: integer;
begin
clrscr; randomize;
write (‘n=‘); readln (n);
for

i:=1 to n do begin
{Так как тип массива integer, то за начальное значение max возьмем}
max:=-32768;
for j:=1 to do begin
a[i,j]:=random(45)-22;
write (a[i,j]:4);
if a[i,j]>max then
begin
max:=a[i,j]; i1:=i; j1:=j;
end;
end;
write (‘max=‘, max, ‘N stroki=‘, i1, ‘N stolbza=‘, j1);
writeln;
end;
readln;
End.
Program prim4;uses crt;type mas=array[1..100,1..100] of integer;var a: mas;    i,j,n,max,i1,j1: integer;begin clrscr; randomize; write (‘n=‘);

Слайд 19Задача 5:
Найти количество элементов, больших некоторого заданного числа Х в

каждой строке массива (во всем массиве).

Задача 5:Найти количество элементов, больших некоторого заданного числа Х в каждой строке массива (во всем массиве).

Слайд 20Program prim5;
uses crt;
var a:=array[1..100,1..100] of integer;
i,j,n,k,x:

integer;
Begin
clrscr; randomize;
write (‘n=‘); readln (n); write (‘x=‘); readln

(x);
for i:=1 to n do begin
k:=0;
for j:=1 to n do begin
a[i,j]:=random(45)-22;
write (a[i,j]:4);
if a[i,j]>x then k:=k+1;
end;
{Если находим для всего массива, то следующую строку надо убрать, а начальное значение k:=0 перенести выше на одну строку}
writeln(‘k=‘,k);
end;
{Печатаем число элементов, удовлетворяющих условию задачи во всем массиве}
write(‘k=‘,k);
readln;
End.
Program prim5;uses crt;var a:=array[1..100,1..100] of integer;    i,j,n,k,x: integer;Begin clrscr; randomize; write (‘n=‘); readln (n);

Слайд 21Задача 6:
Определить, является ли данный квадратный массив симметричным относительно своей

главной диагонали.

Задача 6:Определить, является ли данный квадратный массив симметричным относительно своей главной диагонали.

Слайд 22Решение:
Если массив является симметричным, то для него выполняется равенство a[i,j]=a[j,i]

для всех i=1,…n, j=1,…,n при условии, что i>j. Но если

встретится хотя бы одна такая пара, что соответствующие элементы не будут равны, то массив будет несимметричным.
Решение:Если массив является симметричным, то для него выполняется равенство a[i,j]=a[j,i] для всех i=1,…n, j=1,…,n при условии, что

Слайд 23Program prim6;
uses crt;
var a: array[1..100,1..100] of integer;

i,j,n: integer;
begin
clrscr;
randomize;
write (‘n=’); readln

(n);
for i:=1 to n do begin
for j:=1 to n do begin
a[i,j]:=random(45)-22;
write (a[i,j]:4);
end;
writeln;
end;
readln;
for i:=1 to n do
for j:=1 to n do
if (i>j) and (a[i,j]<>a[j,i]) then
begin
writeln (‘no’);
exit;
end;
writeln (‘jes’);
readln;
End.

Program prim6;uses crt;var a: array[1..100,1..100] of integer;    i,j,n: integer;begin  clrscr;  randomize;

Слайд 24Задача 7:
Вставить строку из нулей на место строки с номером

Задача 7:Вставить строку из нулей на место строки с номером k.

Слайд 25Решение:
Для решения этой задачи необходимо:
Первые k-1 строк оставить без изменения.
Все

строки после k-й сдвинуть на одну назад, это лучше начать

с последней строки и идти до k-й.
Элементам строки k присвоить заданное значение.
Кроме того, необходимо изменить размер массива. Так как мы вставляем строку, то число строк будет на одну больше.
Решение:		Для решения этой задачи необходимо:Первые k-1 строк оставить без изменения.Все строки после k-й сдвинуть на одну назад,

Слайд 26Program prim7;
uses crt;
type mas=array [1..100,1..100] of integer;
var a:mas; i,j,k,n: integer;
begin

clrscr; randomize;
write (‘n=‘); readln (n);

{Создаем и распечатываем двумерный массив}
for i:=1 to n do begin
for j:=1 to n do begin
a[i,j]:=random(45)-22;
write (a[i,j]:4);
end;
writeln;
end;
{Вводим номер вставляемой строки}
write (‘k=‘); readln (k);
{Сдвигаем строки назад до k-й строки, начиная с последней}
for i:=n downto k do
for j:=1 to n do a[i+1,j]:=a[i,j];
{Обнуляем элементы k-й строки}
for j:=1 to n do a[k,j]:=0;
{Распечатываем новый массив, который на одну строку больше исходного}
for i:=1 to n+1 do begin
for j:=1 to n do begin
write (a[i,j]:4);
end;
writeln;
end;
readln;
end.
Program prim7;uses crt;type mas=array [1..100,1..100] of integer;var a:mas; i,j,k,n: integer;begin  clrscr; randomize;  write (‘n=‘); readln

Слайд 27Задача 8:
Удалить строку с номером k.

Задача 8:Удалить строку с номером k.

Слайд 28Решение:
Для того, чтобы удалить строку с номером k, необходимо:
Сдвинуть все

строки, начиная с данной, на одну вверх.
Последнюю строку «обнулить», то

есть всем элементам последней строки присвоить нулевое значение.
Необходимо выводить на экран сначала все строки, а второй раз, после удаления, на одну меньше.
Решение:		Для того, чтобы удалить строку с номером k, необходимо:Сдвинуть все строки, начиная с данной, на одну вверх.Последнюю

Слайд 29Program prim8;
uses crt;
type mas=array[1..100,1..100] of integer;
var a:mas; i,j,k,n: integer;
begin

clrscr;
randomize;
write (‘n=‘); readln (n);

{Создаем и распечатываем двумерный массив}
for i:=1 to n do begin
for j:=1 to n do begin
a[i,j]:=random(45)-22;
write (a[i,j]:4);
end;
writeln;
end;
{Вводим номер удаляемой строки}
write (‘k=‘); readln (k);
{Сдвигаем строки на одну вверх, начиная с данной}
for i:=k to n-1 do
for j:=1 to n do a[i,j]:=a[i+1;j];
{Обнуляем последнюю строку}
for j:=1 to n do a[n,j]:=0;
{Печатаем новый массив, в котором на одну строку меньше}
for i:=1 to n-1 do begin
for j:=1 to n do begin
write (a[i,j]:4);
end;
writeln;
end;
readln;
End.

Program prim8;uses crt;type mas=array[1..100,1..100] of integer;var a:mas; i,j,k,n: integer;begin  clrscr;  randomize;  write (‘n=‘); readln

Слайд 30Задача 9:
Поменять местами строки с номерами k1 и k2.

Задача 9:Поменять местами строки с номерами k1 и k2.

Слайд 31Program prim9;
uses crt;
type mas=array[1..100,1..100] of integer;
var a:mas; i,j,n,k1,k2,r: integer;
begin

clrscr;
randomize;
write (‘n=‘); readln (n);

{Создаем и распечатываем двумерный массив}
for i:=1 to n do begin
for j:=1 to n do begin
a[i,j]:=random(45)-22;
write (a[i,j]:4);
end;
writeln;
end;
{Вводим номера строк ,которые будем менять местами}
write (‘k1=,k2=‘); readln (k1,k2);
{Меняем значения k1 и k2 строк между собой}
for j:=1 to n do begin
r:=a[k1,j]; a[k1,j]:=a[k2,j]; a[k2,j]:=r;
end;
{Распечатаем измененный массив}
for i:=1 to n do begin
for j:=1 to n do begin
write (a[i,j]:4);
end;
writeln;
end; readln;
End.
Program prim9;uses crt;type mas=array[1..100,1..100] of integer;var a:mas; i,j,n,k1,k2,r: integer;begin  clrscr;  randomize;  write (‘n=‘); readln

Слайд 32Задача 10 (самостоятельно):
В массиве размером n*n к элементам четных столбцов

прибавить элемент первого столбца соответствующей строки.

Задача 10 (самостоятельно):В массиве размером n*n к элементам четных столбцов прибавить элемент первого столбца соответствующей строки.

Слайд 33Идея решения:
В данной задаче необходимо проверять четность столбцов.
Основная часть

программы будет выглядеть так:
For i:=1 to n do begin

For j:=1 to n do

Идея решения:В данной задаче необходимо проверять четность столбцов. Основная часть программы будет выглядеть так:			For i:=1 to n

Слайд 34Проверяем номер столбца на четность. В случае четности прибавляем к

значениям проверяемого столбца соответствующие значения первого столбца.
if j mod 2=0

then a[i,j]:=a[i,j]+a[i,1];
end;
Далее распечатываем измененный массив.
Проверяем номер столбца на четность. В случае четности прибавляем к значениям проверяемого столбца соответствующие значения первого столбца.		if

Слайд 35Иногда массив необходимо заполнять не случайными числами, а по некоторому

закону. Рассмотрим такой пример.

Иногда массив необходимо заполнять не случайными числами, а по некоторому закону. Рассмотрим такой пример.

Слайд 36Задача 11:
Заполнить массив А размером n*m следующим образом, например, n=5

m=5:




То есть заполняется в виде «змейки».
1 2

3 4 5
9 8 7 6
12 13 14 15
19 18 17 16
22 23 24 25
Задача 11:Заполнить массив А размером n*m следующим образом, например, n=5 m=5:То есть заполняется в виде «змейки». 1

Слайд 37Решение:
Для того, чтобы заполнить, надо вывести правило заполнения, а оно

в данном случае будет таким:
Если ряд нечетный (то есть номер

строки – нечетное число), то
a[i,j]=(i-1)*m+j,
Иначе (то есть когда строка четная)
a[i,j]=i*m-j+1.
По этому правилу и составляем процедуру заполнения. Тем более, что проверка на четность производилась в предыдущей задаче (только со столбцами).
Решение:Для того, чтобы заполнить, надо вывести правило заполнения, а оно в данном случае будет таким:Если ряд нечетный

Слайд 38Program prim11;
uses crt;
type mas=array[1..100,1..100] of integer;

var a: mas;
i, j,

n, m: integer;
begin
clrscr;
write (‘n=, m=‘); readln (n,m);
for i:=1 to n do begin
for j:=1 to m do begin
{Заполняем массив по выведенному правилу заполнения
и выводим его на экран}
if imod2=1 then a[i,j]:=(i-1)*m+j else a[i,j]:=i*m-j+1;
write (a[i,j]:4);
end;
writeln;
end;
readln;
end.
Program prim11;  uses crt;  type mas=array[1..100,1..100] of integer;  var a: mas;

Слайд 39Задача 12:
Латинским квадратом называется массив, в строках и столбцах которого

нет одинаковых элементов. Вывести на экран латинский квадрат размером NxN.
Пример

латинского квадрата:

Задача 12:Латинским квадратом называется массив, в строках и столбцах которого нет одинаковых элементов. Вывести на экран латинский

Слайд 40Идея решения:
Заполнить 1-ю строку квадратного массива (NxN) числами от 1

до N.
Вторая строка массива получается путем циклического сдвига элементов первой

строки, и т.д.
Циклический сдвиг можно реализовать, используя типовой алгоритм вставки-удаления (в зависимости от циклического сдвига).
Идея решения:Заполнить 1-ю строку квадратного массива (NxN) числами от 1 до N.Вторая строка массива получается путем циклического

Слайд 41Program prim12;
var a: array[1..10,1..10] of integer;
n,

i, j, x: integer;
begin
writeln (‘razmernost=‘);

readln (n);
for j:=1 to n do
a[1,j]:=j;
{сдвиг}
for i:=2 to n do
begin
for j:=1 to n do
a[i,j]:=a[i-1,j];
x:=a[i,n];

for j:=n downto 2 do
a[i,j]:=a[i,j-1];
a[i,1]:=x;
{вывод}
for i:=1 to n do
begin
for j:=1 to n do
write (a[i,j]);
writeln;
end;
readln;
End.

Program prim12;  var a: array[1..10,1..10] of integer;  n, i, j, x: integer;  begin

Обратная связь

Если не удалось найти и скачать доклад-презентацию, Вы можете заказать его на нашем сайте. Мы постараемся найти нужный Вам материал и отправим по электронной почте. Не стесняйтесь обращаться к нам, если у вас возникли вопросы или пожелания:

Email: Нажмите что бы посмотреть 

Что такое TheSlide.ru?

Это сайт презентации, докладов, проектов в PowerPoint. Здесь удобно  хранить и делиться своими презентациями с другими пользователями.


Для правообладателей

Яндекс.Метрика