Двумерные массивы. Формирование матриц и вывод ее элементов

Опредление понятия

Двумерный массив структура данных, хранящая прямоугольную матрицу вида:

a11 a12 a13 a14 a15 ... a1m
a21 a22 a23 a24 a25 ... a2m
a31 a32 a33 a34 a35 ... a3m
a41 a42 a43 a44 a45 ... a4m
a51 a52 a53 a54 a55 ... a5m
... ... ... ... ... ... ...
an1 an2 an3 an4 an5 ... anm
  • В матрице каждый элемент определяется номером строки и номером столбца, на пересечении которых он находится
  • В Паскале двумерный массив расматривается как массив, элементы которого есть линейные массивы (массив массивов). Два следующих описания двумерных массивов тождественны
    var
        mass:array[1..10] of array[1..20] of real;
    var
        mass:array[1..10, 1..20] of real;
    
  • Матрица, в которой число строк равно числу столбцов называется квадратной матрицей.
  • Для обращения к элементу матрицы, необходимо использовать два индекса обозначающие номер строки и номер столбца. Например MyArr1[4, 5]. В данном случае элемент массива (MyArr1) находится в четвертой строке и пятом столбце.
  • Все, что было сказано об основных действиях с одномерными массивами, справедливо и для матриц. При поэлементном переборе масива в цикле, в качестве индексов выступают переменные целочисленного типа. Традиционно, для обозначения индекса строки используют идентификатор «i«, а столбца — «j«.
  • Обработка матрицы заключается в том, что вначале поочередно рассматриваются элементы первой строки (столбца), затем второй и т. д. до последней.
  • Если номер строки элемента совпадает с номером столбца (i = j), это означает, что элемент лежит на главной диагонали матрицы.
  • Если элемент лежит на побочной диагонали, то индексы связаны с числом элементов (n) следующим равенством: i + j = n + 1

Описание двумерного массива

Существует несколько способов объявления (описания) двумерного массива в Pascal.

Предварительное описание типа массива

type 
    matrix = array[1..5, 1..10] of integer; {массив целых чисел}
var
    mass:matrix;

Определение переменной как массив без предварительного описания типа массива

var
    mass:array[1..5, 1..10] of integer;

Инициализация двумерного массива

При инициализации двумерных массивов каждая строка заключается в дополнительную пару круглых скобок:

const 
    mass:array = ((2,3,1,0), (1,9,1,3), (3,5,7,0));

Ввод/вывод значений элементов двумерного массива

Очень часто значения элементов массива вводятся с клавиатуры. Этот способ задания информации слишком трудоемок при работе с массивами больших размеров. Для отладки широкого класса алгоритмов такой ввод информации должен быть заменен формированием элементов массива случайным образом. Для этого используют процедуру randomize и функцию random. При работе с двумерными массивами используются вложенные циклы (обычно цикл с параметром for).

Заполнение массива случайными числами

const
    n = 5;
    m = 10;
var
    i, j:integer;
    matrix:array[1..n, 1..m] of integer;
begin
randomize;
for i := 1 to n do {обращение к строкам массива}
    for j := 1 to m do {обращение поэлементно к столбцам}
        matrix[i, j] := random(100); {помещаем в текущий элемент случайное число из интервала [0,100)}

Вывод массива

for i := 1 to n do 
begin
    for j := 1 to m do
        write(matrix[i, j]:4);
    writeln {переход на новую строку по выходу из внутреннего цикла}
end;

Примеры решения задач

Пример 1

Постановка задачи. Даны целые положительные числа M и N. Сформировать целочисленную матрицу размера M × N, у которой все элементы J-го столбца имеют значение 5·J (J = 1, …, N).

const
    m = 7;
    n = 10;
var
    i, j:byte;
    matrix:array[1..m, 1..n] of integer;
begin
for i := 1 to m do
    for j := 1 to n do
        matrix[i, j] := 5 * j;
...
{Вывод массива}

Пример 2

Постановка задачи. Даны целые положительные числа M, N и набор из M чисел. Сформировать матрицу размера M × N, у которой в каждом столбце содержатся все числа из исходного набора (в том же порядке).

const
    m = 5;
    n = 7;
    vector:array[1..m] of integer = (3, 5, 2, 7, 4);
var
    i, j:byte;
    matrix:array[1..m, 1..n] of integer;
begin
for j := 1 to n do {берем j-ый столбец}
    for i := 1 to m do {обращаемся к элементам j-го столбца по строкам}
        matrix[i, j] := vector[i]; {реализация}
...
{Вывод полученного двумерного массива}

Домашнее задание

  1. Даны целые положительные числа M и N. Сформировать целочисленную матрицу размера M × N, у которой все элементы I-й строки имеют значение 10·I (I = 1, …, M).
  2. Даны целые положительные числа M, N и набор из N чисел. Сформировать матрицу размера M × N, у которой в каждой строке содержатся все числа из исходного набора (в том же порядке).
  3. Дополнительно. Даны целые положительные числа M, N, число D и набор из M чисел. Сформировать матрицу размера M × N, у которой первый столбец совпадает с исходным набором чисел, а элементы каждого следующего столбца равны сумме соответствующего элемента предыдущего столбца и числа D (в результате каждая строка матрицы будет содержать элементы арифметической прогрессии).
  4. Дополнительно. Дана матрица размера M × N. Вывести ее элементы, расположенные в строках с четными номерами (2, 4, …). Вывод элементов производить по строкам, условный оператор не использовать.

Добавить комментарий