Двумерные массивы. Заполнение двумерного массива по заданному правилу

Разделы: Информатика


Тема: Двумерные массивы. Заполнение двумерного массива по заданному правилу.

Цели:отработать навыки работы с элементами двумерного массива, научиться заполнять двумерные массивы по заданному правилу, научиться выводить зависимость между номером строки и номером столбца; развитие логического мышления учащихся.

ХОД ЗАНЯТИЯ

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