Сумма и произведение элементов матрицы. Как найти сумму элементов матрицы


Как найти сумму элементов матрицы

Матрица или массив элементов представляет собой таблицу определенных значений с фиксированным размером в m строк и n столбцов. Множество выполняемых над матрицей и ее элементами операций позволяет решать различные математические задачи. В частности, одной из таких задач является поиск суммы элементов матрицы. Причем рассматриваемые значения могут быть расположенны как по диагонали, так и в других частях заданного математического объекта.

Инструкция

  • Запишите матрицу размерностью mхn, где m – число строк, а n – число столбцов объекта. В наиболее простом случае поиска суммы всех элементов матрицы выполните последовательное сложение ее значений. В первой строке первый элемент сложите со вторым, к получившемуся результату прибавьте третий и т.д. до последнего значения строки. Далее к сумме элементов первой строки таким же образом прибавляйте значения второй и всех последующих строк матрицы. Причем при сложении чисел учитывайте их знак. Так, значения -4 и 5 дадут в сумме 1, а -5 + -6 = -11.
  • Определите сумму элементов на главной диагонали заданной матрицы. Главная диагональ матрицы проходит от ее верхнего левого угла до нижнего правого. Все элементы, стоящие на этой «прямой» сложите между собой. Определив сумму всех чисел на главной диагонали, запишите окончательный результат.
  • Аналогичным образом вычислите сумму элементов на побочной диагонали рассматриваемой матрицы. Побочной диагональю называется «прямая» проходящая от верхнего левого угла матрицы в нижний правый. Все значения объекта, лежащие на данной диагонали, сложите между собой и запишите результат.
  • Найдите сумму элементов, стоящих ниже главной диагонали. Для этого проведите по главной диагонали матрицы прямую, отсекающую значения самой диагонали и верхней части объекта. Найдите сумму элементов, расположенных ниже прямой. Для этого желательно складывать значения построчно. Из первой строки ниже главной диагонали возьмите единственный стоящий там элемент, сложите его с первым элементом следующей строки, затем к полученной сумме прибавьте значение второго элемента. Далее перейдите к элементам на третьей строке и т.д., пока не будет произведено сложение последнего, не зачеркнутого элемента матрицы ниже главной диагонали.
  • Для вычисления суммы элементов матрицы, стоящих выше главной диагонали, выполните аналогичные действия, только в качестве слагаемых рассматривайте элементы стоящие выше зачеркнутой диагонали.

completerepair.ru

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

Если поставлена задача вычислить сумму элементов каждой строки матрицы, то алгоритм ее выполнения таков:

  1. По-строчно перебираем элементы матрицы (внешний цикл отвечает за переход к новой строке, счетчик - первый индекс элементов).
  2. Во внешнем цикле перед внутренним присваиваем переменной для суммы значение 0. В ней будет накапливаться сумма элементов текущей строки, элементы которой перебираются во внутреннем цикле.
  3. После внутреннего цикла выводим значение переменной-суммы на экран.

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

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 sum := 0; for j:=1 to M do begin mat[i,j] := random(); write(mat[i,j]:6:2); sum := sum + mat[i,j]; end; writeln ('|', sum:6:2); end; end.

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

0.55 0.59 0.72 0.84 0.60 0.86 0.54| 4.71   0.85 0.42 0.62 0.65 0.38 0.44 0.30| 3.66   0.89 0.06 0.96 0.27 0.38 0.48 0.79| 3.84   0.81 0.53 0.48 0.57 0.39 0.93 0.84| 4.54   0.07 0.34 0.09 0.65 0.02 0.37 0.83| 2.36

Если поставлена задача нахождения суммы элементов только определенной строки матрицы, то в решении используется только один цикл (без вложенного). Перебираются только элементы указанной строки. При этом меняется значение только второго индекса, а первый всегда постоянен - это номер строки.

Программа ниже усложнена тем, что пользователь сам определяет номер строки матрицы, элементы которой необходимо просуммировать. Если поставлена задача, в которой конкретно задается строка, то вместо переменной num следует использовать число, обозначающее номер строки. Например, для третьей строки выражение sum := sum + mat[num,j] следует заменить на sum := sum + mat[3,j].

const M = 7; N = 5; var mat: array[1..N,1..M] of real; i, j: byte; sum: real; num: byte; 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; write('Введите номер строки: '); readln(num); sum := 0; for j:=1 to M do // считаем сумму элементов заданной строки sum := sum + mat[num,j]; writeln('Сумма ее элементов: ', sum:6:2); 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   Введите номер строки: 2   Сумма ее элементов: 3.66

pas1.ru

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

Матрицу можно представить как массив, в который вложены другие массивы. Эти другие массивы имеют одинаковую длину (например, 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); ...

pas1.ru

Сумма и произведение элементов матрицы

Чтобы найти сумму элементов матрицы (двумерного массива) в Pascal, надо до цикла перебора присвоить переменной, в которой хранится сумма, значение 0. При переборе во внутреннем цикле добавлять к этой переменной очередной элемент матрицы. После цикла вывести значение на экран.

Произведение элементов матрицы вычисляется аналогично сумме, за исключением того, что начальным значением переменной должно быть число 1 (т. к. при умножении на 0 результат обнулится). Если матрица содержит хотя бы один нуль, то результат произведения также станет равным нулю.

Следует обратить внимание на то, что при нахождении произведения элементов матрицы, легко выйти за пределы допустимых типом данных значений. В этом случае программа будет работать не корректно (например, выдавать ноль или отрицательное число, когда такого быть не может). Поэтому в программе ниже переменная mult (в которой хранится произведение элементов) объявляется типом longint, а элементы массива принимают значения от 1 до 5 включительно.

В программе ниже сначала двумерный массив заполняется. После этого переменным sum и mult присваиваются начальные значения. Подсчет суммы и произведения происходит во второй конструкции циклов (при вторичном обходе матрицы). Программу можно сократить, если подсчет выполнять в том же цикле, что и заполнение массива.

const N = 3; M = 5; var arr: array[1..N,1..M] of integer; i,j: byte; sum: integer; mult: longint; begin randomize; for i:=1 to N do begin for j:=1 to M do begin arr[i,j] := random(5)+1; write(arr[i,j]:3); end; writeln; end; sum := 0; mult := 1; for i:=1 to N do for j:=1 to M do begin sum := sum + arr[i,j]; mult := mult * arr[i,j]; end; writeln ('Sum: ', sum); writeln ('Mult: ', mult); end.

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

 1 4 2 2 4 5 3 4 1 4 1 1 3 5 2 Sum: 42 Mult: 460800

pas1.ru

Найти строку матрицы с максимальной суммой элементов

Решения данной задачи, когда требуется найти только одну строку с максимальной суммой элементов и когда таких строк несколько и все их надо определить, несколько различаются.

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

Пусть переменная sum_max хранит найденную максимальную сумму. Переменная row_max хранит номер строки, элементы которой дают в сумме максимум.

Перебираем построчно матрицу. Перед вложенным циклом переменной sum (хранит сумму элементов текущей строки) присваиваем 0. Во вложенном цикле перебираются элементы текущей строки. Значение каждого из них добавляется к sum.

После того, как сумма элементов текущей строки посчитана (вышли из внутреннего цикла), проверяем не больше ли она значения, хранимого в sum_max. Если больше, то записываем ее в sum_max, а переменной row_max присваиваем номер текущей строки (хранится в переменной i).

В конце программы выводим значения sum_max и row_max (она содержит ответ задачи - номер искомой строки) на экран. В данном случае будет найдена только первая строка с максимальной суммой. Если бы в условном операторе использовался логический оператор >= (больше или равно), то, при наличии нескольких строк с максимальной суммой, была бы выведена на экран последняя.

const N = 5; M = 3; var a: array[1..N,1..M] of integer; i, j, row_max: byte; sum, sum_max: integer; begin randomize; for i:=1 to N do begin for j:=1 to M do begin a[i,j] := random(10); write(a[i,j]:3); end; writeln; end;   sum_max := -1; row_max := 0; for i:=1 to N do begin sum := 0; for j:=1 to M do sum := sum + a[i,j]; if sum > sum_max then begin sum_max := sum; row_max := i; end; end;   writeln('Строка ',row_max,', сумма ',sum_max); end.

Теперь обратимся ко второму случаю, когда надо определить все строки с максимальной суммой элементов, если таковых несколько. В данном случае следует использовать два отдельных перебора матрицы. В первом просто определяется максимум. Во втором на экран выводятся номера строк, сумма элементов которых совпала с ранее найденным максимальным значением.

const N = 20; M = 3; var a: array[1..N,1..M] of integer; i, j: byte; sum, sum_max: integer; begin randomize; for i:=1 to N do begin for j:=1 to M do begin a[i,j] := random(10); write(a[i,j]:3); end; writeln; end;   sum_max := -1; for i:=1 to N do begin sum := 0; for j:=1 to M do sum := sum + a[i,j]; if sum > sum_max then sum_max := sum; end;   write('Максимальную сумму ',sum_max,' содержат строки:'); for i:=1 to N do begin sum := 0; for j:=1 to M do sum := sum + a[i,j]; if sum = sum_max then write(i:3); end; writeln; end.

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

7 8 6 6 4 0 1 8 1 9 7 5 4 3 0 8 2 8 4 7 0 0 7 6 1 5 9 7 4 9 0 3 3 8 7 4 5 5 1 1 3 3 8 8 4 4 6 6 8 1 6 5 6 7 8 9 4 2 9 3 Максимальную сумму 21 содержат строки: 1 4 19

pas1.ru