Сумма элементов столбцов матрицы
Вариант 1. Вычислить сумму элементов каждого столбца матрицы (двумерного массива).
Вариант 2. Найти сумму элементов определенного столбца матрицы.
Матрицу можно представить как массив, в который вложены другие массивы. Эти другие массивы имеют одинаковую длину (например, M), а количество этих вложенных массивов - другое число (например, N). Так, если M = 7, а N = 5, то это значит, что матрица состоит из 5 одномерных массивов, в каждом из которых по 7 элементов.
Элементы одного вложенного массива обычно считают строкой матрицы. Столбцы же матрицы формируют элементы разных вложенных массивов, но имеющие в них одинаковые индексы (занимающие одинаковые позиции). Так, все первые элементы вложенных массивов, формируют первый столбец матрицы. Элементы с индексом 2 образуют второй столбец.
Если mat - это переменная-матрица, то выражение mat[i,j]
обозначает обращение к элементу, имеющему номер строки i (это номер вложенного массива), и номер столбца j (это номер самого элемента во вложенном массиве).
Обычно матрицы заполняются построчно: во внешнем цикле перебираются строки, во внутреннем - элементы строк (формируют столбцы). Однако это не обязательно. Заполнять можно и по столбцам: во внешнем цикле перебирать столбцы, во внутреннем - обращаться к элементам разных вложенных массивов, но имеющих идентичный индекс.
В программе ниже заполнение двумерного массива происходит построчно (стандартно), затем вычисляется сумма элементов каждого столбца, и здесь обход происходит по столбцам. Обратите внимание, что в данном случае внешний цикл отсчитывает до M, а внутренний - до N. В разных итерациях вложенного цикла различна первая переменная-индекс (в данном случае i), обозначающая номер строки, а столбец остается постоянным.
const
M = 7;
N = 5;
var
mat: array[1..N,1..M] of real;
i, j: byte;
sum: real;
begin
for i:=1 to N do begin // заполнение матрицы
for j:=1 to M do begin
mat[i,j] := random();
write(mat[i,j]:6:2);
end;
writeln;
end;
writeln('Sum of col:');
for j:=1 to M do begin // подсчет сумм
sum := 0;
for i:=1 to N do
sum := sum + mat[i,j];
write(sum:6:2);
end;
writeln;
end.
Пример выполнения кода программы:
0.55 0.59 0.72 0.84 0.60 0.86 0.54
0.85 0.42 0.62 0.65 0.38 0.44 0.30
0.89 0.06 0.96 0.27 0.38 0.48 0.79
0.81 0.53 0.48 0.57 0.39 0.93 0.84
0.07 0.34 0.09 0.65 0.02 0.37 0.83
Sum of col:
3.17 1.94 2.87 2.98 1.78 3.07 3.30
Когда поставлена задача нахождения суммы элементов только определенного столбца, то она решается проще, без вложенного цикла. Вместо переменной j используется конкретное число, обозначающее столбец, сумму которого следует посчитать. Например, для вычисления суммы элементов третьего столбца код будет таким:
...
sum := 0;
for i:=1 to N do
sum := sum + mat[i,3];
writeln(sum:6:2);
...
Пример решения похожей задачи в сообществе VK: Обнулить столбец с наименьшей суммой элементов