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