Сумма элементов столбцов матрицы | Язык Паскаль
Pascal. Основы программирования Сложные Средние Простые задачи

Сумма элементов столбцов матрицы

Вариант 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: Обнулить столбец с наименьшей суммой элементов