Двумерные массивы. Заполнение двумерного массива по заданному правилу
Тема: Двумерные массивы. Заполнение двумерного массива по заданному правилу.
Цели:отработать навыки работы с элементами двумерного массива, научиться заполнять двумерные массивы по заданному правилу, научиться выводить зависимость между номером строки и номером столбца; развитие логического мышления учащихся.
1. Актуализация знаний
Массивы, положение элементов в которых описывается двумя индексами, называются двумерными. Структура такого массива может быть представлена прямоугольной матрицей. Каждый элемент матрицы однозначно определяется указанием номера строки и столбца, номер строки – i, номер столбца – j. Рассмотрим матрицу А размером n*m:
а11 а12 а13 а14 а21 а22 а23 а24 а31 а32 а33 а34Матрица из 3 строк и 4 столбцов, количество строк n=3, количество столбцов m=4. Каждый элемент имеет свой номер, который состоит из двух чисел – номера строки, в которой находится элемент, и номера столбца. Например, а23 – это элемент, стоящий во второй строке и в третьем столбце. Двумерный массив на языке Турбо Паскаль можно описать по-разному. Чтобы описать двумерный массив, надо определить какого типа его элементы, и каким образом они пронумерованы (какого типа его индекс). Существует несколько способов описания двумерного массива.
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) Фрагмент программы формирования двумерного массива через генератор случайных чисел.
2. Изучение нового материала. Заполнение массива по правилу
Рассмотрим несколько фрагментов программ заполнения двумерного массива по некоторому закону. Для этого необходимо вывести правило заполнения.
1. Заполнить массив А размером n*m следующим образом, например
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
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
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
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