Как найти сумму элементов ниже главной диагонали

14 / 14 / 0

Регистрация: 01.04.2015

Сообщений: 96

1

Найти сумму элементов ниже главной диагонали матрицы

26.11.2015, 09:03. Показов 11936. Ответов 5


Студворк — интернет-сервис помощи студентам

Дана матрица А размера 7*7. Найти сумму эл-ов ниже главной диагонали



1



Programming

Эксперт

94731 / 64177 / 26122

Регистрация: 12.04.2006

Сообщений: 116,782

26.11.2015, 09:03

5

Sergey_B

174 / 174 / 57

Регистрация: 08.01.2013

Сообщений: 335

26.11.2015, 10:03

2

Лучший ответ Сообщение было отмечено locusman как решение

Решение

Элементы лежащие на главной диагонали в сумму не считаются, суммируются только те что лежат ниже.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
            int n = 7;
            int sum = 0;
            int[,] matr = new int[n,n];
            Random r = new Random(DateTime.Now.Millisecond);
            Console.WriteLine("Исходная матрица:");
            for (int i = 0; i < n; i++)
            {
                for (int j = 0; j < n; j++)
                {
                    matr[i,j] = r.Next(0,10);
                    Console.Write(matr[i, j].ToString() + " ");
                    if (i > j)
                    {
                        sum += matr[i, j];
                    }
                }
                Console.WriteLine();
            }
            Console.WriteLine("Сумма элементов ниже главной диагонали = {0}", sum);



1



Remuless

25 / 25 / 23

Регистрация: 07.06.2015

Сообщений: 142

26.11.2015, 10:04

3

C#
1
2
3
4
5
6
double sum = 0;
for (int i = 0; i < 7; i++)
{
    For (int j = 0; j < i; j++)
        sum += mas[i][j];
}



1



14 / 14 / 0

Регистрация: 01.04.2015

Сообщений: 96

26.11.2015, 10:36

 [ТС]

4

Программа почему то после открытия работает 1сек и вылетает



1



25 / 25 / 23

Регистрация: 07.06.2015

Сообщений: 142

26.11.2015, 10:38

5

Цитата
Сообщение от locusman
Посмотреть сообщение

Программа почему то после открытия работает 1сек и вылетает

добавь в конце Console.Readkey();



1



Matthew-python

0 / 0 / 0

Регистрация: 28.09.2019

Сообщений: 1

28.09.2019, 17:32

6

Добавлено через 1 минуту

Цитата
Сообщение от Sergey_B
Посмотреть сообщение

Элементы лежащие на главной диагонали в сумму не считаются, суммируются только те что лежат ниже.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
            int n = 7;
            int sum = 0;
            int[,] matr = new int[n,n];
            Random r = new Random(DateTime.Now.Millisecond);
            Console.WriteLine("Исходная матрица:");
            for (int i = 0; i < n; i++)
            {
                for (int j = 0; j < n; j++)
                {
                    matr[i,j] = r.Next(0,10);
                    Console.Write(matr[i, j].ToString() + " ");
                    if (i > j)
                    {
                        sum += matr[i, j];
                    }
                }
                Console.WriteLine();
            }
            Console.WriteLine("Сумма элементов ниже главной диагонали = {0}", sum);

Какой код будет в случае размера матрицы 5*6, например?



0



Тем, кто знакомым с математическими матрицами, будет не трудно освоить и двумерные массивы в Pascal. Матрица – это математический объект, представляющий собой прямоугольную таблицу. Таблица состоит из элементов, которые находятся на пересечении строк и столбцов, определяющих их, то есть i-ая строка и j-ый столбец задают адрес k-ому элементу матрицы (kij). Двумерные массивы абсолютно аналогичны математическим матрицам.

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

Mas[m, n], где Mas – имя массива, n – номер строки, а m – номер столбца.

Описать матрицу в программе можно несколькими способами:

1) В разделе описания переменных:

Var Mas: Array[1..n, 1..m] of <тип элементов>;

2) При помощи одномерного массива, элементами которого являются одномерные массивы.
Пример:

Const
n = 5; m = 10;
Type
Arr1 = Array[1..m] of <тип элементов >;
Arr2 = Array[1..n] of arr1;
Var Mas: arr2;

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

3) Предыдущий способ можно упростить так:

Const n = 5; m = 10;
Турe arr=Array[1..n] Of Аrrау[1..m] of <тип элементов>;
Var Mas: arr;

4) И снова сократив запись, получим:

Const n = 5; m = 10;
Type arr = Array[1..n,1..m] of <тип элементов>;
Var Mas: arr;

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

For i:= 1 To n Do
  For j:= 1 To m Do

Например, для заполнения массива случайнми числами:

for i:=1 to n do
  for j:=1 to n do 
    x[i,j]:=random(100); 

Для вывода двумерного массива вещественных чисел размером n строк, m столбцов:

for i:=1 to n do begin
  for j:=1 to m do 
    write(x[i,j]:5:2);
  writeln;
end;

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

program input_and_output_array;
uses crt;
const n=3; m=3;
var i, j: integer;
mas: array[1..n, 1..m] of integer;
begin
  {ввод массива}
  for i:=1 to n do
    for j:=1 to m do
    begin
      write(' Элемент ', i,' строки, ',j,' столбца = ');
      readln(mas[i, j]);
    end;
  writeln(' Получившаяся матрица: ');
  {вывод массива}
  for i:=1 to n do
  begin
    for j:=1 to m do
    begin
      write(mas[i, j]:5);
    end;
  writeln
  end;
end.

Количество элементов в массиве (его размерность) можно узнать, умножив количество строк на количество столбцов.

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

sum:=0;

for i:=1 to n do
  for j:=1 to n do 
    sum:=sum+x[i,j];

writeln('Сумма=',sum); 

Сумма элементов главной диагонали квадратной матрицы (элементы главной диагонали имеют одинаковые индексы -x[1,1], x[2,2] и т.д.):

sum:=0;

for i:=1 to n do 
  sum:=sum+x[i,i];

writeln('Сумма=',sum);

Сумма элементов побочной диагонали (диагонали противоположной главной). Индексы элементов побочной диагонали в сумме равны n+1, т.е. i+j=n+1 или j=n+1-i:

sum:=0;

for i:=1 to n do 
  sum:=sum+x[i,n+1-i];

writeln('Сумма=',sum);

Сумма элементов ниже главной диагонали квадратной матрицы (строго ниже):

sum:=0;

for i:=1 to n do
  for j:=1 to n do 
    if i>j then 
      sum:=sum+x[i,j];

writeln('Сумма=',sum);

Можно не просматривать весь массив, а брать только нужные элементы:

sum:=0;

for i:=2 to n do
  for j:=1 to i-1 do 
    sum:=sum+x[i,j];

writeln('Сумма=',sum);

Сумма элементов выше и на главной диагонали квадратной матрицы:

sum:=0;

for i:=1 to n do
  for j:=1 to n do
    if i<=j then 
      sum:=sum+x[i,j];

writeln('Сумма=',sum);

Здесь также можно не просматривать весь массив, а брать только нужные элементы:

sum:=0;

for i:=1 to n do
  for j:=i to n do 
    sum:=sum+x[i,j];

writeln('Сумма=',sum);

Сумма элементов ниже побочной диагонали квадратной матрицы (строго ниже) :

sum:=0;

for i:=1 to n do
  for j:=1 to n do
    if i+j>n+1 then 
      sum:=sum+x[i,j];

writeln('Сумма=',sum);

Можно не просматривать весь массив, а брать только нужные элементы:

sum:=0;

for i:=2 to n do
  for j:=n+2-i to n do 
    sum:=sum+x[i,j];

writeln('Сумма=',sum);

Если надо посчитать сумму элемсентов ниже побочной диагонали и на ней, то в предыдущем примере, при просмотре всего массива в предыдущем примере надо заменить знак отношения > на >=, а при просмотре толко нужных элементов применить такой код:

sum:=0;

for i:=1 to n do
  for j:=n+1-i to n do 
    sum:=sum+x[i,j];

writeln('Сумма=',sum);

При подсчете суммы элементов выше и на главной диагонали, выше и на побочной диагонали возможно применине такого кода:

sum:=0;

for i:=1 to n do
  for j:=1 to n do
    if (i<=j) and (i+j<=n+1) then
      sum:=sum+x[i,j];

writeln('Сумма=',sum);

Подсчет сумм элементов по строкам:

for i:=1 to n do begin
  sum:=0;

  for j:=1 to n do 
    sum:=sum+x[i,j];

  writeln('Сумма ',i,'-й строки',sum);
end;

Подсчет сумм элементов по столбцам:

for j:=1 to n do begin
  sum:=0;

  for i:=1 to n do 
    sum:=sum+x[i,j];

  writeln('Сумма ',j,'-го столбца ',sum);
end;

Безусловно суммы по строкам и столбцам можно записывать в одномерный массив. Например, для сумм по столбцам:

for i:=1 to n do 
  sum[j]:=0;

for i:=1 to n do
  for j:=1 to n do 
    zum[j]:=sum[j]+x[i,j];

{вывод сумм по столбцам}
for i:=1 to n do 
  write(sum[i]:4);
writeln; 

Суммы элементов по диагоналям, параллельным главной диагонали.

Очевидно, что таких сумм будет 2n-1. Кроме того, разности индексов эдементов, стоящих на одной диагонали будут равны друг другу. Имеется в виду разность «номер строки минус номер столбца». Эти разности будут меняться от -n+1 для самой верхней диагонали s1, содержащей всего лишь один элемент, до n-1 для диагонали s2N-1, расположенной в самом низу матрицы и содержащей также всего один элемент. Таким образом, для подсчета сумм мы должны объявить массив:

Var sum:array[-n+1..n-1] of integer;

Число элементов в этом массиве будет 2n-1. Код для подсчета этих сумм:

for i:=-n+1 to n-1 do 
  sum[i]:=0;

for i:=1 to n do
  for j:=1 to n do 
    sum[i-j]:=sum[i-j]+x[i,j];

for i:=-n+1 to n-1 do 
  write(sum[i]); 

Суммы элементов по диагоналям, параллельным побочной диагонали.

for i:=2 to 2*n do 
  sum[i]:=0;

for i:=1 to n do
  for j:=1 to n do 
    sum[i+j]:=sum[i+j]+x[i,j];

for i:=2 to 2*n do 
  write(sum[i]);

Суммы элементов по периметрам двумерного массива.

Cледует различать четный или нечетный порядок матрицы n. Число сумм будет равно k=n div 2 при четном n и k=n div 2 +1 при нечетном значении n.

Счет суммы начинается по строке i от столбца j равного i и заканчивается столбцом n-i+1, т.е. начинается с элемена находящегося на главной диагонали и заканчивается элементом на побочной диагонали.

Одновременно учитываются элементы из параллельной строки, индекс которой равен n-i+1.

Затем считаем элементы по двум паралельным столбцам i и n-i+1 (не учитывая элементы, стоящие в строках). Если n -нечетное число, то выводим значение центрального элемента массива x[k+1,k+1].

k:=n div 2;

for i:=1 to k do begin
  sum:=0;

  {строки}
  for j:=i to n-i+1 do
    sum:=sum+x[i,j]+x[n-i+1,j];

  {столбцы}
  for j:=i+1 to n-i do
    sum:=sum+x[j,i]+x[j,n-i+1];

  writeln(sum); {вывод суммы}
end;

if n mod 2=1 then
  writeln(x[k+1,k+1]); 
program diagonal;
var
a:array[1..10,1..10] of integer;
n,i,j,s:integer;  {'n - размерность матрицы'}
procedure inputArray;
begin
  for i:=1 to n do
  for j:=1 to n do
  readln(a[i,j]);
  end;
procedure printArray;
begin
  for i:=1 to n do  begin
  for j:=1 to n do Write(a[i,j],' ');
  WriteLn;
  end;
end;
function SumElem:real;
var
  i,j,s:integer;
begin
  for i:=1 to n do
  for j:=1 to n do
  if i>j then s:=s+a[i,j];
  SumElem:=s;
end;
begin
  s:=0;
  writeln('Введите размерность матрицы');
  readln(n);
  writeln('Введите элементы матрицы');
  inputArray;
  writeln('Матрица:');
  printArray;
  s:=SumElem;
  writeln('сумма элементов находящиеся ниже главной диагонали матрицы- ',s);
end.

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

Сделал генерирование матрицы, для удобства вывел главную диагональ, хотел для начала вывести столбцы, но оно выводит как-то не так как я думал https://i.stack.imgur.com/aizg1.png, нужно именно столбец, а потом добавить все числа с него, т.е 48 43 0 13 и добавило это, аналогично и с другим столбцом 28 21 12 и тд.
https://i.stack.imgur.com/unSRT.png

#include <iostream>
#include <ctime>

using namespace std;

int main()
{
    srand(time(NULL));

    int matr[5][5];
    for (int i = 0; i < 5; ++i)
    {
        for (int j = 0; j < 5; ++j)
        {
            matr[i][j] = rand() % 50;
        }
    }

    for (int i = 0; i < 5; ++i)
    {
        for (int j = 0; j < 5; ++j)
        {
            cout << matr[i][j] << " ";
        }
        cout << 'n';
    }

    cout << 'n';
    cout << "Diagonal";
    cout << 'n';

    for (int i = 0; i < 5; ++i)
    {
        cout << 'n' << matr[i][i] << " ";
    }

    cout << 'n';
    cout << "suma chisel";
    cout << 'n';

    for (int i = 0; i < 5; ++i)
    {
        for (int j = 0; j < i; ++j)
        {
            cout << matr[i][j] << "  ";
        }
    }



    cin.get();
    return 0;
}    


Here is an example case demonstrating how to find the sum in both cases, using nested loop:

matrix = [[i+j for j in range(4)] for i in range(4)]

for row in matrix:
    print(" ".join(list(map(str,row))))

totalSum = 0
for i in range(1,len(matrix)):
    for j in range(i):
        totalSum += matrix[i][j]
print("Below sum: ", totalSum)

totalSum = 0
for i in range(len(matrix)):
    for j in range(i+1,len(matrix)):
        totalSum += matrix[i][j]
print("Above sum: ", totalSum)

Output:

0 1 2 3
1 2 3 4
2 3 4 5
3 4 5 6
Below sum:  18
Above sum:  18

You can also use these one-liners:

Below diagonal:

totalSum = sum([matrix[i][j] for i in range(1,len(matrix)) for j in range(i)])

Above diagonal:

totalSum = sum([matrix[i][j] for i in range(len(matrix)) for j in range(i+1,len(matrix))])

If you want to sum all numbers above and below the main diagonal you can perform an index check:

totalSum = 0
for i in range(len(matrix)):
    for j in range(len(matrix)):
        if not i==j:
            totalSum += matrix[i][j]
print("Sum: ", totalSum)

Yet, another way of finding that sum (although not recommended) is to find the total sum of the matrix and the sum of the main diagonal and then perform a subtraction to find the final sum:

matrix = [[i+j for j in range(4)] for i in range(4)]

for row in matrix:
    print(" ".join(list(map(str,row))))

matrixSum = sum([sum(elem for elem in row) for row in matrix])
diagonalSum = sum([matrix[i][i] for i in range(len(matrix))])
finalSum = matrixSum - diagonalSum

print("Matrix sum: ", matrixSum)
print("Diagonal sum: ", diagonalSum)
print("Final sum: ", finalSum)

Output:

0 1 2 3
1 2 3 4
2 3 4 5
3 4 5 6

Matrix sum:  48
Diagonal sum:  12
Final sum:  36

Note: Mind the syntax in the print statements as you’re using Python 2 and my answer is in Python 3.

Понравилась статья? Поделить с друзьями:
  • Как найти массовую долю сахара в воде
  • Как найти расположение программы на андроид
  • Как найти внутреннюю энергию в точке
  • Как найти грузовой момент
  • Код ошибки е15 в посудомоечной машине bosch как исправить