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

Задача

Посчитать суммы каждой строки и каждого столбца матрицы. Вывести суммы строк в конце каждой строки, а суммы столбцов под соответствующими столбцами.

Пояснение к задаче и алгоритм решения

Поскольку двумерный массив обычно перебирается построчно, то сумму строк считать проще. Можно, заполняя строку матрицы и выводя ее элементы на экран, накапливать в переменной сумму элементов строки и выводить ее в конце строки.

Для сумм столбцов можно предусмотреть отдельный массив, в ячейках которого накапливать сумму каждого столбца. При построчном проходе по матрице, каждый новый элемент следует суммировать с соответствующим ему элементом массива сумм столбцов. Индекс элемента в строке матрицы будет совпадать с индексом элемента в массиве сумм.

Выводить суммы столбцов следует в отдельном цикле.

Исходный код на языке программирования Pascal

const
    M = 10;
    N = 5;
var
    a: array[1..N,1..M] of integer;
    i, j: byte;
    s: integer;
    sc: array[1..M] of integer;
begin
     for i:= 1 to M do
        sc[i] := 0;
 
    for i:=1 to N do begin
        s := 0;
        for j:=1 to M do begin
            a[i,j] := random(10);
            write(a[i,j]:6);
            s := s + a[i,j];
            sc[j] := sc[j] + a[i,j]
        end;
        writeln ('   |', s);
    end;
    for i:= 1 to M do
        write('--':6);
    writeln;
    for i:= 1 to M do
        write(sc[i]:6);
    writeln;    
 
end.

Особенности решения на языке программирования Pascal

Пример выполнения программы:

     5     5     7     8     6     8     5     8     4     6   |62
     6     3     4     2     8     0     9     2     3     4   |41
     7     8     5     4     5     3     9     8     0     3   |52
     0     6     0     3     8     9     7     1     8     8   |50
     9     4     7     8     4     5     7     6     1     7   |58
    --    --    --    --    --    --    --    --    --    --
    27    26    23    25    31    25    37    25    16    28

Исходный код на языке программирования C

#include <stdio.h>
#define M 10
#define N 5
main() {
    int a[N][M];
    int sc[M];
    int s, i, j;
    srand(time(NULL));
    for (i=0; i<M; i++) sc[i] = 0;
    for (i=0; i<N; i++) {
        s = 0;
        for (j=0; j<M; j++) {
            a[i][j] = rand() % 10;
            printf("%5d", a[i][j]);
            s += a[i][j];
            sc[j] += a[i][j];
        }
        printf("   |%d\n", s);
    }
    for (i=0; i<M; i++)
        printf("%5s", "--");
    printf("\n");
    for (i=0; i<M; i++)
        printf("%5d", sc[i]);
    printf("\n");  
}

Исходный код на языке программирования Python

from random import random
M = 10
N = 5
a = []
for i in range(N):
    b = []
    for j in range(M):
        b.append(int(random()*11))
        print("%3d" % b[j], end='')
    a.append(b)
    print('   |', sum(b))
 
for i in range(M):
    print(" --", end='')
print()
 
for i in range(M):
    s = 0
    for j in range(N):
        s += a[j][i]
    print("%3d" % s, end='')
print()

Особенности решения на языке программирования Python

Пример(ы) выполнения программы на языке Python:

  6  7  3 10 10 10  4  2  6  5   | 63
  2  8  0  9  0  4  9  3  6  3   | 44
  5  3  1 10  5  6  5  2  0  9   | 46
 10  9 10  8  7  8  5  2 10  9   | 78
  3  3  6  0  4  1  6 10 10  3   | 46
 -- -- -- -- -- -- -- -- -- --
 26 30 20 37 26 29 29 19 32 29

В Python используется немного иной алгоритм решения задачи. Сначала создается пустой список - будущая матрица. Далее в цикле в нее добавляются вложенные списки.

Суммы строк матрицы вычисляются с помощью функции sum(), которой передается текущий список-строка цикла.

Суммы столбцов вычисляются путем прохода по каждому столбу матрицы. Обратите внимание, что здесь наоборот: внешний цикл - проход по столбцам, внутренний - по строкам.

Исходный код на языке программирования КуМир

алг суммы строк столбцов
нач
  цел M = 10, N = 5
  цел таб a[1:N,1:M], sc[1:M]
  цел i, j, s
  нц для i от 1 до M
    sc[i] := 0
  кц
 
  нц для i от 1 до N
    s := 0
    нц для j от 1 до M
      a[i,j] := int(rand(0,10))
      вывод a[i,j], "  "
      s := s + a[i,j]
      sc[j] := sc[j] + a[i,j]
    кц
    вывод " |", s, нс
  кц
 
  нц для i от 1 до M
    вывод "---"
  кц
  вывод нс
  нц для i от 1 до M
    вывод sc[i], " "
  кц
кон

Исходный код на языке программирования Basic

M = 10
N = 5
dim a(N,M)
dim sc(M)
for i = 0 to N-1
        s = 0
        for j=0 to M-1
                a[i,j] = int(rand*10)
                print a[i,j] + "   ";
                s = s + a[i,j]
                sc[j] = sc[j] + a[i,j]
        next j
        print "  |" + s
next i
 
for i=0 to M-1
        print "--   ";
next i
print
for i=0 to M-1
        print sc[i] + " ";
next i
print

Тема

Матрицы

Уровень сложности

Средний

Дата публикации