Двумерные массивы. Заполнение двумерного массива по заданному правилу
Тема: Двумерные массивы. Заполнение двумерного массива по заданному правилу.
Цели:отработать навыки работы с элементами двумерного массива, научиться заполнять двумерные массивы по заданному правилу, научиться выводить зависимость между номером строки и номером столбца; развитие логического мышления учащихся.
ХОД ЗАНЯТИЯ
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