Двумерные массивы. Заполнение двумерного массива по заданному правилу
Тема: Двумерные массивы. Заполнение двумерного массива по заданному правилу.
Цели:отработать навыки работы с элементами двумерного массива, научиться заполнять двумерные массивы по заданному правилу, научиться выводить зависимость между номером строки и номером столбца; развитие логического мышления учащихся.
ХОД ЗАНЯТИЯ
1. Актуализация знаний
Массивы, положение элементов в которых описывается двумя индексами, называются двумерными. Структура такого массива может быть представлена прямоугольной матрицей. Каждый элемент матрицы
однозначно определяется указанием номера строки и столбца, номер строки - i, номер столбца - j.
Рассмотрим матрицу А размером n*m:
| а11 | а12 | а13 | а14 |
| а21 | а22 | а23 | а24 |
| а31 | а32 | а33 | а34 |
Матрица из 3 строк и 4 столбцов, количество строк n=3, количество столбцов m=4. Каждый элемент имеет свой номер, который состоит из двух чисел - номера строки, в которой находится элемент, и
номера столбца. Например, а23 - это элемент, стоящий во второй строке и в третьем столбце.
Двумерный массив на языке Турбо Паскаль можно описать по-разному. Чтобы описать двумерный массив, надо определить какого типа его элементы, и каким образом они пронумерованы (какого типа его индекс).
Существует несколько способов описания двумерного массива.
Const maxN=…; {Максимальные значения количества строк}
maxM=…; {Максимальные значения количества столбцов}
1 способ
Type Mas = array [1..maxN] of <тип элементов>; {Одномерный массив}
Type TMas = array [1..maxM] of Mas; {Одномерный массив, элементами которого являются одномерные массивы}
2 способ
Type TMas = array [1..maxN] of array [1..maxM] of <тип элементов>;
{Одномерный массив, элементами которого являются одномерные массивы}
3 способ
Type <имя типа>= array [1..maxN, 1..maxM] of <тип элементов>; {Двумерный массив}
Предпочтение отдается третьему способу описания двумерного массива.
Например:
Const N=3; M=4;
Type TMas= array [1..N, 1..M] of integer; {Двумерный массив из целых чисел}
Формирование двумерного массива можно осуществлять четырьмя способами: ввод с клавиатуры, через генератор случайных чисел, по заданному правилу или с помощью файла.
1) Формирование двумерного массива при помощи ввода с клавиатуры и алгоритм построчного вывода элементов матрицы.
Const N=10;M=10;
Type Tmas= array [1..N,1..M] of integer;
Var A:Tmas; i,j:integer;
Begin
{Ввод элементов матрицы}
For i:=1 to N do
For j:=1 to M do
Read(A[i,j]);
{Вывод элементов матрицы}
For i:=1 to N do begin
For j:=1 to M do
Write(A[i,j]:4); {Печатается первая строка}
Writeln {Переход на новую строку}
end;
End.
2) Фрагмент программы формирования двумерного массива через генератор случайных чисел.
Begin
Randomize; {Инициализация генератора случайных чисел}
{Ввод элементов матрицы}
For i:=1 to N do
For j:=1 to M do
A[i,j]:=random(45)-22;
2. Изучение нового материала. Заполнение массива по правилу
Рассмотрим несколько фрагментов программ заполнения двумерного массива по некоторому закону. Для этого необходимо вывести правило заполнения.
1. Заполнить массив А размером n*m следующим образом, например
n=6 и m=8:
1 2 3 4 5 6 7 8
16 15 14 13 12 11 10 9
17 18 19 20 21 22 23 24
32 31 30 29 28 27 26 25
33 34 35 36 37 38 39 40
48 47 46 45 44 43 42 41
Массив заполняется по принципу «змейки». Правило заполнения: если номер строки - нечетное число, то A[i,j]=(i-1)*m+j, иначе A[i,j]=i*m-j+1.
program M1А;
var A:array[1..100,1..100] of integer;
n,m,i,j: integer;
begin
readln(n,m);
for i:=1 to n do begin
for j:=1 to m do
begin
if i mod 2 = 1 then
A[i,j]=(i-1)*m+j
else
A[i,j]=i*m-j+1;
write(A[i,j]:3);
end;
writeln;
end;
readln;
end.
Приведем пример программы другого способа заполнения по заданному правилу:
program M1В;
var A:array[1..100,1..100] of integer;
n,m,i,j: integer;
c: integer;
begin
readln(n,m);
c:=1;
for i:=1 to n do
begin
for j:=1 to m do
begin
A[i,j]:=c;
if (i mod 2 = 0) and (j<>m) then
dec(c)
else
inc(c);
write(A[i,j]:3);
end;
c:=c+m-1;
writeln;
end;
readln;
end.
2. Заполнить массив A по следующему принципу:
1 0 2 0 3 0 4
0 5 0 6 0 7 0
8 0 9 0 10 0 11
0 12 0 13 0 14 0
program M2;
var A:array[1..100,1..100] of integer;
n,m,i,j: integer;
c: integer;
begin
readln(n,m);
c:=0;
for i:=1 to n do
begin
for j:=1 to m do
begin
if (i-1+j) mod 2 = 0 then
A[i,j]:=0
else
begin
inc(c);
A[i,j]:=c;
end;
write(A[i,j]:5);
end;
writeln;
end;
readln;
end.
3. Заполнить массив A по следующему принципу:
1 12 13 24 25 36
2 11 14 23 26 35
3 10 15 22 27 34
4 9 16 21 28 33
5 8 17 20 29 32
6 7 18 19 30 31
program M3;
var A:array[1..100,1..100] of integer;
n,m,i,j: integer;
c: integer;
begin
readln(n,m);
c:=1;
for j:=1 to m do
begin
for i:=1 to n do
begin
A[i,j]:=c;
if (j mod 2 = 0) and (i<>n) then
dec(c)
else
inc(c);
end;
c:=c+n-1;
end;
for i:=1 to n do
begin
for j:=1 to m do
write(A[i,j]:5);
writeln;
end;
readln;
end.
4. Заполнить массив A по следующему принципу:
1 2 3 4 5
2 3 4 5 1
3 4 5 1 2
4 5 1 2 3
5 1 2 3 4
program M4;
var i,j,m,c,d: integer;
A:array[1..100,1..100] of integer;
begin
c:=1;
readln(m);
for j:=1 to m do
begin
i:=c;
d:=1;
repeat
A[i,j]:=d;
inc(i);
if i>m then
i:=1;
inc(d);
until i=c;
dec(c);
if c <= 0 then
c:=m-c;
end;
for i:=1 to m do
begin
for j:=1 to m do
write(A[i,j]:2);
writeln;
end;
end.
5. Заполнить массив A по следующему принципу:
1 0 0 0 1
0 1 0 1 0
0 0 1 0 0
0 1 0 1 0
1 0 0 0 1
program M5;
var m,i,j: integer;
A:array[1..100,1..100] of integer;
begin
readln(m);
for i:=1 to m do
begin
for j:=1 to m do
begin
if (i=j) or (m-i+1=j) then
A[i,j]:=1
else
A[i,j]:=0;
write(A[i,j]:2);
end;
writeln;
end;
end.
3. Задачи для самостоятельного решения
1) Заполнить массив по следующему принципу:
6 5 4 3 2 1
7 8 9 10 11 12
18 17 16 15 14 13
19 20 21 22 23 24
30 29 28 27 26 25
31 32 33 34 35 36
2) Заполнить массив по следующему принципу:
36 25 24 13 12 1
35 26 23 14 11 2
34 27 22 15 10 3
33 28 21 16 9 4
32 29 20 17 8 5
31 30 19 18 7 6
3) Заполнить массив по следующему принципу:
0 1 1 1 0
1 0 1 0 1
1 1 0 1 1
1 0 1 0 1
0 1 1 1 0
4) Заполнить массив по следующему принципу:
31 32 33 34 35 36
25 26 27 28 29 30
19 20 21 22 23 24
13 14 15 16 17 18
7 8 9 10 11 12
1 2 3 4 5 6
5) Заполнить массив по следующему принципу:
31 25 19 13 7 1
32 26 20 14 8 2
33 27 21 15 9 3
34 28 22 16 10 4
35 29 23 17 11 5
36 30 24 18 12 6
Домашние задание:
1) Заполнить массив по следующему принципу:
6 7 18 19 30 31
5 8 17 20 29 32
4 9 16 21 28 33
3 10 15 22 27 34
2 11 14 23 26 35
1 12 13 24 25 36
2) Заполнить массив по следующему принципу:
31 32 33 34 35 36
30 29 28 27 26 25
19 20 21 22 23 24
18 17 16 15 14 13
7 8 9 10 11 12
6 5 4 3 2 1
3) Заполнить массив по следующему принципу:
0 1 1 1 0
1 0 1 0 1
1 1 0 1 1
1 0 1 0 1
0 1 1 1 0