November 29, 2022

Строки и столбцы матрицы

В PascalABC.NET двумерные массивы трактуются как матрицы и содержат ряд мощных методов. Важнейшими методами являются a.Row(i) и a.Col(j) - i-тая строка и j-тый столбец матрицы a, представленные как одномерные массивы.

Рассмотрим ряд задач, которые легко решаются этими методами

Заполним вначале матрицу 6 на 9 оценками от 2 до 5:

##
var a := MatrRandomInteger(6,9,2,5);
a.Println(3);

Результат:

  2  5  2  5  3  4  4  2  2
  5  2  2  4  4  3  4  3  4
  2  2  4  3  4  5  5  4  2
  2  4  4  2  3  2  5  3  3
  4  3  5  4  5  5  4  4  3
  3  4  3  5  2  3  4  5  3

Выведем количество двоек и троек в нулевой строке:

a.Row(0).Count(x -> x in |2,3|).Println;

Сделаем то же двумерным срезом:

a[0,:].Count(x -> x in |2,3|).Println;

Теперь выполним массовый запрос: вычислим количество двоек и троек в каждой строке. Для этого сформируем одномерный массив, в котором столько элементов, сколько строк в матрице - a.RowCount - и каждый i-тый элемент равен количеству двоек и троек в i-той строке:

ArrGen(a.RowCount, i -> a.Row(i).Count(x -> x in |2,3|)).Println;

Результат:

5 4 4 6 2 5

Для закрепления посчитаем суммы в каждом столбце:

ArrGen(a.ColCount, i -> a.Col(i).Sum).Println;

Результат:

18 20 20 23 21 22 26 21 17

Вот итоговая программа:

Вывод. Стандартная библиотека PascalABC.NET содержит мощные методы работы со строками и столбцами матрицы Rows и Cols, которые позволяют вычислять характеристики строк и столбцов, такие как суммы, максимумы, минимумы, количества, очень просто. Если нам необходимо посчитать такую характеристику для всех строк или столбцов, то формируем одномерный массив функцией ArrGen и в качестве второго параметра передаём лямбду, проектирующую индекс массива на нужную характеристику, например: j -> a.Col(j).Max.