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

Improve Article

Save Article

Like Article

  • Read
  • Discuss
  • Improve Article

    Save Article

    Like Article

    Given a 2D square matrix, find the sum of elements in Principal and Secondary diagonals. For example, consider the following 4 X 4 input matrix.

    A00 A01 A02 A03
    A10 A11 A12 A13
    A20 A21 A22 A23
    A30 A31 A32 A33

    The primary diagonal is formed by the elements A00, A11, A22, A33. 

    1. Condition for Principal Diagonal: The row-column condition is row = column. 
      The secondary diagonal is formed by the elements A03, A12, A21, A30.
    2. Condition for Secondary Diagonal: The row-column condition is row = numberOfRows – column -1.

    Examples : 

    Input : 
    4
    1 2 3 4
    4 3 2 1
    7 8 9 6
    6 5 4 3
    Output :
    Principal Diagonal: 16
    Secondary Diagonal: 20
    
    Input :
    3
    1 1 1
    1 1 1
    1 1 1
    Output :
    Principal Diagonal: 3
    Secondary Diagonal: 3

    Method 1: In this method, we use two loops i.e. a loop for columns and a loop for rows and in the inner loop we check for the condition stated above:

    Implementation:

    C

    #include <stdio.h>

    const int M = 4;

    const int N = 4;

    void printDiagonalSums(int mat[M][N])

    {

        int principal = 0, secondary = 0;

        for (int i = 0; i < M; i++)

        {

            for (int j = 0; j < N; j++)

            {

                if (i == j)

                    principal += mat[i][j];

                if ((i + j) == (N - 1))

                    secondary += mat[i][j];

            }

        }

        printf("%s", "Principal Diagonal:");

        printf("%dn", principal);

        printf("%s", "Secondary Diagonal:");

        printf("%dn", secondary);

    }

    int main()

    {

        int a[][4] = {{1, 2, 3, 4},

                      {5, 6, 7, 8},

                      {1, 2, 3, 4},

                      {5, 6, 7, 8}};

        printDiagonalSums(a);

        return 0;

    }

    C++

    #include <bits/stdc++.h>

    using namespace std;

    const int MAX = 100;

    void printDiagonalSums(int mat[][MAX], int n)

    {

        int principal = 0, secondary = 0;

        for (int i = 0; i < n; i++) {

            for (int j = 0; j < n; j++) {

                if (i == j)

                    principal += mat[i][j];

                if ((i + j) == (n - 1))

                    secondary += mat[i][j];

            }

        }

        cout << "Principal Diagonal:" << principal << endl;

        cout << "Secondary Diagonal:" << secondary << endl;

    }

    int main()

    {

        int a[][MAX] = { { 1, 2, 3, 4 }, { 5, 6, 7, 8 },

                        { 1, 2, 3, 4 }, { 5, 6, 7, 8 } };

        printDiagonalSums(a, 4);

        return 0;

    }

    Java

    import java.io.*;

    public class GFG {

        static void printDiagonalSums(int [][]mat,

                                             int n)

        {

            int principal = 0, secondary = 0;

            for (int i = 0; i < n; i++) {

                for (int j = 0; j < n; j++) {

                    if (i == j)

                        principal += mat[i][j];

                    if ((i + j) == (n - 1))

                        secondary += mat[i][j];

                }

            }

            System.out.println("Principal Diagonal:"

                                        + principal);

            System.out.println("Secondary Diagonal:"

                                        + secondary);

        }

        static public void main (String[] args)

        {

            int [][]a = { { 1, 2, 3, 4 },

                          { 5, 6, 7, 8 },

                          { 1, 2, 3, 4 },

                          { 5, 6, 7, 8 } };

            printDiagonalSums(a, 4);

        }

    }

    Python3

    MAX = 100

    def printDiagonalSums(mat, n):

        principal = 0

        secondary = 0;

        for i in range(0, n):

            for j in range(0, n):

                if (i == j):

                    principal += mat[i][j]

                if ((i + j) == (n - 1)):

                    secondary += mat[i][j]

        print("Principal Diagonal:", principal)

        print("Secondary Diagonal:", secondary)

    a = [[ 1, 2, 3, 4 ],

         [ 5, 6, 7, 8 ],

         [ 1, 2, 3, 4 ],

          [ 5, 6, 7, 8 ]]

    printDiagonalSums(a, 4)

    C#

    using System;

    public class GFG {

        static void printDiagonalSums(int [,]mat,

                                            int n)

        {

            int principal = 0, secondary = 0;

            for (int i = 0; i < n; i++) {

                for (int j = 0; j < n; j++) {

                    if (i == j)

                        principal += mat[i,j];

                    if ((i + j) == (n - 1))

                        secondary += mat[i,j];

                }

            }

            Console.WriteLine("Principal Diagonal:"

                                      + principal);

            Console.WriteLine("Secondary Diagonal:"

                                      + secondary);

        }

        static public void Main ()

        {

            int [,]a = { { 1, 2, 3, 4 },

                         { 5, 6, 7, 8 },

                         { 1, 2, 3, 4 },

                         { 5, 6, 7, 8 } };

            printDiagonalSums(a, 4);

        }

    }

    PHP

    <?php

    $MAX = 100;

    function printDiagonalSums($mat, $n)

    {

        global $MAX;

        $principal = 0;

        $secondary = 0;

        for ($i = 0; $i < $n; $i++)

        {

            for ($j = 0; $j < $n; $j++)

            {

                if ($i == $j)

                    $principal += $mat[$i][$j];

                if (($i + $j) == ($n - 1))

                    $secondary += $mat[$i][$j];

            }

        }

        echo "Principal Diagonal:" ,

                   $principal ,"n";

        echo "Secondary Diagonal:",

                  $secondary ,"n";

    }

    $a = array (array ( 1, 2, 3, 4 ),

                array ( 5, 6, 7, 8 ),

                array ( 1, 2, 3, 4 ),

                array ( 5, 6, 7, 8 ));

    printDiagonalSums($a, 4);

    ?>

    Javascript

    <script>

    const MAX = 100;

    void printDiagonalSums(mat, n)

    {

        let principal = 0, secondary = 0;

        for (let i = 0; i < n; i++) {

            for (let j = 0; j < n; j++) {

                if (i == j)

                    principal += mat[i][j];

                if ((i + j) == (n - 1))

                    secondary += mat[i][j];

            }

        }

        document.write("Principal Diagonal:" + principal + "<br>");

        document.write("Secondary Diagonal:" + secondary + "<br>");

    }

        let a = [ [ 1, 2, 3, 4 ], [ 5, 6, 7, 8 ],

                        [ 1, 2, 3, 4 ], [ 5, 6, 7, 8 ] ];

        printDiagonalSums(a, 4);

    </script>

    Output

    Principal Diagonal:18
    Secondary Diagonal:18

    Time Complexity: O(N*N), as we are using nested loops to traverse N*N times.
    Auxiliary Space: O(1), as we are not using any extra space.

    Method 2( Efficient Approach): In this method, we use one loop i.e. a loop for calculating the sum of both the principal and secondary diagonals: 

    Implementation:

    C

    #include <stdio.h>

    #include <stdlib.h>

    const int M = 4;

    const int N = 4;

    void printDiagonalSums(int mat[M][N])

    {

        int principal = 0, secondary = 0;

        for (int i = 0; i < N; i++)

        {

            principal += mat[i][i];

            secondary += mat[i][N - i - 1];       

        }

        printf("%s","Principal Diagonal:");

        printf("%dn", principal);

        printf("%s", "Secondary Diagonal:");

        printf("%dn", secondary);

    }

    int main()

    {

        int a[4][4] = {{1, 2, 3, 4},

                       {5, 6, 7, 8},

                       {1, 2, 3, 4},

                       {5, 6, 7, 8}};

        printDiagonalSums(a);

        return 0;

    }

    C++

    #include <bits/stdc++.h>

    using namespace std;

    const int MAX = 100;

    void printDiagonalSums(int mat[][MAX], int n)

    {

        int principal = 0, secondary = 0;

        for (int i = 0; i < n; i++) {

            principal += mat[i][i];

            secondary += mat[i][n - i - 1];       

        }

        cout << "Principal Diagonal:" << principal << endl;

        cout << "Secondary Diagonal:" << secondary << endl;

    }

    int main()

    {

        int a[][MAX] = { { 1, 2, 3, 4 }, { 5, 6, 7, 8 },

                         { 1, 2, 3, 4 }, { 5, 6, 7, 8 } };

        printDiagonalSums(a, 4);

        return 0;

    }

    Java

    import java.io.*;

    public class GFG {

        static void printDiagonalSums(int [][]mat,

                                            int n)

        {

            int principal = 0, secondary = 0;

            for (int i = 0; i < n; i++) {

                principal += mat[i][i];

                secondary += mat[i][n - i - 1];

            }

            System.out.println("Principal Diagonal:"

                                       + principal);

            System.out.println("Secondary Diagonal:"

                                       + secondary);

        }

        static public void main (String[] args)

        {

            int [][]a = { { 1, 2, 3, 4 },

                          { 5, 6, 7, 8 },

                          { 1, 2, 3, 4 },

                          { 5, 6, 7, 8 } };

            printDiagonalSums(a, 4);

        }

    }

    Python3

    MAX = 100

    def printDiagonalSums(mat, n):

        principal = 0

        secondary = 0

        for i in range(0, n):

            principal += mat[i][i]

            secondary += mat[i][n - i - 1]

        print("Principal Diagonal:", principal)

        print("Secondary Diagonal:", secondary)

    a = [[ 1, 2, 3, 4 ],

         [ 5, 6, 7, 8 ],

         [ 1, 2, 3, 4 ],

         [ 5, 6, 7, 8 ]]

    printDiagonalSums(a, 4)

    C#

    using System;

    public class GFG {

        static void printDiagonalSums(int [,]mat,

                                           int n)

        {

            int principal = 0, secondary = 0;

            for (int i = 0; i < n; i++) {

                principal += mat[i,i];

                secondary += mat[i,n - i - 1];

            }

            Console.WriteLine("Principal Diagonal:"

                                      + principal);

            Console.WriteLine("Secondary Diagonal:"

                                      + secondary);

        }

        static public void Main ()

        {

            int [,]a = { { 1, 2, 3, 4 },

                         { 5, 6, 7, 8 },

                         { 1, 2, 3, 4 },

                         { 5, 6, 7, 8 } };

            printDiagonalSums(a, 4);

        }

    }

    PHP

    <?php

    $MAX = 100;

    function printDiagonalSums($mat, $n)

    {

        global $MAX;

        $principal = 0; $secondary = 0;

        for ($i = 0; $i < $n; $i++)

        {

            $principal += $mat[$i][$i];

            $secondary += $mat[$i][$n - $i - 1];    

        }

        echo "Principal Diagonal:" ,

                   $principal ,"n";

        echo "Secondary Diagonal:" ,

                   $secondary ,"n";

    }

    $a = array(array(1, 2, 3, 4),

               array(5, 6, 7, 8),

               array(1, 2, 3, 4),

               array(5, 6, 7, 8));

    printDiagonalSums($a, 4);

    ?>

    Javascript

    <script>

    function  printDiagonalSums(mat,n)

        {

            let principal = 0, secondary = 0;

            for (let i = 0; i < n; i++) {

                principal += mat[i][i];

                secondary += mat[i][n - i - 1];

            }

            document.write("Principal Diagonal:"

                                    + principal+"<br>");

            document.write("Secondary Diagonal:"

                                    + secondary);

        }

            let a = [[ 1, 2, 3, 4 ],

                        [5, 6, 7, 8 ],

                        [ 1, 2, 3, 4 ],

                        [ 5, 6, 7, 8 ]];

            printDiagonalSums(a, 4);

    </script>

    Output

    Principal Diagonal:18
    Secondary Diagonal:18

    Time Complexity: O(N), as we are using a loop to traverse N times.
    Auxiliary Space: O(1), as we are not using any extra space.

    This article is contributed by Mohak Agrawal. If you like GeeksforGeeks and would like to contribute, you can also write an article using write.geeksforgeeks.org or mail your article to review-team@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks. 

    Last Updated :
    27 Sep, 2022

    Like Article

    Save Article

    Перейти к содержанию

    Сумма диагоналей матрицы

    На чтение 1 мин. Просмотров 11 Опубликовано 17.11.2022

    Если задана квадратная матрица mat, верните сумму диагоналей матрицы.

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

    Пример 1:

    Входные данные: mat = [[1,2,3],
      [4,5,6],
      [7,8,9]]
    Выход: 25
    Пояснение: Сумма диагоналей: 1 + 5 + 9 + 3 + 7 = 25
    Обратите внимание, что элемент mat[1][1] = 5 учитывается только один раз.

    Пример 2:

    Входные данные: mat = [[1,1,1,1],
      [1,1,1,1],
      [1,1,1,1],
      [1,1,1,1]]
    Выход: 8

    Пример 3:

    Вход: mat = [[5]]
    Выход: 5

    Ограничения:

    • n == mat.length == mat[i].length
    • 1 <= n <= 100
    • 1 <= mat[i][j] <= 100

    РЕШЕНИЕ:

    class Solution:
        def diagonalSum(self, mat: List[List[int]]) -> int:
            n = len(mat)
            total = -mat[n//2][n//2] if n & 1 else 0
            for i in range(n):
                total += mat[i][i] + mat[i][n-i-1]
            return total
    

    Войдите в полноэкранный режим Выйти из полноэкранного режима

    Перейти к содержанию

    Вычислить сумму элементов главной или побочной диагонали матрицы

    Просмотров 9.6к. Обновлено 15 октября 2021

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

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

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

    Pascal


    const N = 10;
    type
    type_arr = array[1..N, 1..N] of byte;

    var
    arr: type_arr;
    i, j: byte;
    sum: byte;
    ch: char;

    function diagonal (var arr1: type_arr; c: char): byte;
    var
    sum1: byte;
    i, j: byte;
    begin
    sum1 := 0;
    if c = '1' then j := 1
    else j:= N;
    for i:=1 to N do begin
    sum1 := sum1 + arr1[i][j];
    if c = '1' then j := j + 1
    else j := j-1;
    end;
    diagonal := sum1;
    end;

    begin
    randomize;
    for i:=1 to N do begin
    for j:=1 to N do begin
    arr[i,j] := random(10);
    write(arr[i,j]:4);
    end;
    writeln;
    end;
    write('Главная (1) или побочная (2): ');
    readln(ch);
    if (ch = '1') or (ch = '2') then begin
    sum := diagonal(arr, ch);
    writeln(sum);
    end;
    end.



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

    0 2 0 4 8 0 4 1 5 1
    1 7 7 0 1 7 8 4 7 7
    1 0 7 4 6 5 0 6 4 7
    1 5 3 3 0 4 6 7 8 0
    1 7 3 8 1 6 9 4 4 7
    8 5 7 7 1 7 8 8 8 4
    2 0 1 3 1 5 2 0 0 8
    4 8 3 7 5 6 5 1 3 9
    9 0 9 2 1 0 3 6 1 3
    8 3 7 5 8 8 9 5 1 1
    Главная (1) или побочная (2): 2
    41

    Язык Си


    #include < stdio.h>
    #define N 10
    int diagonal(char c);
    int a[N][N];

    main() {
    int i, j, sum;
    char ch;
    srand(time(NULL));
    for (i=0; i< N; i++) {
    for (j=0; j< N; j++) {
    a[i][j] = rand() % 10;
    printf("%3d", a[i][j]);
    }
    printf("n");
    }
    printf("Главная (1) или побочная (2): ");
    scanf("%c", &ch);
    sum = diagonal(ch);
    printf("%dn", sum);
    }

    int diagonal(char c) {
    int s, i, j;
    s = 0;
    if (c == '1')
    for (i=0; i< N; i++)
    s += a[i][i];
    else
    for (i=0, j=N-1; i< N; i++,j--)
    s += a[i][j];
    return s;
    }

    Python

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


    def diagonal(l,c):
    s = 0
    i = 0
    while i < N:
    if c == '1':
    s += l[i][i]
    else:
    s += l[i][N-i-1]
    i += 1
    return s

    from random import random
    N = 10
    a = []
    for i in range(N):
    b = []
    for j in range(N):
    n = int(random()*10)
    b.append(n)
    print("%3d" % n, end='')
    a.append(b)
    print()

    ch = input("Главная (1) или побочная (2): ")
    if ch == '1' or ch == '2':
    summa = diagonal(a,ch)
    print(summa)

    КуМир


    цел N = 7
    цел таб a[1:N,1:N]
    алг
    нач
    цел i, j, sum
    сим ch
    нц для i от 1 до N
    нц для j от 1 до N
    a[i,j] := int(rand(0,10))
    вывод a[i,j], " "
    кц
    вывод нс
    кц
    вывод "Главная (г) или побочная (п): "
    ввод ch
    если ch = "г" или ch = "п" то
    sum := diag(ch)
    вывод sum
    все
    кон

    алг цел diag(сим c)
    нач
    цел s, i, j
    s := 0
    нц для i от 1 до N
    если c = "г" то
    s := s + a[i,i]
    иначе
    s := s + a[i,N-i+1]
    все
    кц
    знач := s
    кон

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

    Если размер матрицы 5х5 то вся матрица займёт диапазон C3:G7

    Для наглядности можно выделить ячейки диагонали см Как в таблице Excel выделить диагональ другим цветом?

    Придется воспользоваться формулой массива с выбором из всего диапазана ячеек у которых номер строки равен номеру столбца

    Для нашей таблицы

    номер строки можно вычислить по формуле =СТРОКА()-СТРОКА(С3)

    номер столбца можно вычислить по формуле =СТООЛБЕЦ()-СТООЛБЕЦ(С3)

    Суммируемое выражение:

    ЕСЛИ( (СТРОКА(C3:G7) — СТРОКА(C3)) = (СТОЛБЕЦ(C3:G7) — СТОЛБЕЦ(C3)); C3:G7;0)

    Общая формула массива для суммы элементов главной диагонали таблицы для диапазона C3:C7 выглядит так:

    =СУММ( ЕСЛИ( (СТРОКА(C3:G7) — СТРОКА(C3)) = (СТОЛБЕЦ(C3:G7) — СТОЛБЕЦ(C3)); C3:G7;0))

    ввод ограничиваем одновременным нажатием клавиш CTRL+SHIFT+ENTER (фигурные скобки появятся сами):

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

    Для нахождения суммы элементов главной диагонали матрицы (след матрицы) выберите нужный размер исходной матрицы и заполните её элементы.

    Другие онлайн калькуляторы

    • Транспонирование матрицы
    • Нахождение союзной матрицы
    • Нахождение обратной матрицы
    • Вычисление определителя матрицы
    • Приведение матрицы к треугольному виду
    • Возведение матрицы в степень
    • Вычисление ранга матрицы
    • Сложение матриц
    • Вычитание матриц
    • Умножение матриц
    • Умножение матрицы на число

    Описание онлайн калькулятора

    С помощью данного онлайн калькулятора Вы сможете найти сумму элементов главной диагонали матрицы (след матрицы) или проверить правильность своего решения.

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

    Icon info

    Описание работы онлайн калькулятора

    • Минимальный размер матрицы 2х2;
    • Максимальный размер матрицы 10х10;
    • В поля ввода значений элементов матриц, можно вводить следующие типы чисел:
      • Натуральные (0; 3; 9);
      • Отрицательные (-43);
      • Десятичные (1,5 или 1.5);
      • Дробные (2/3).
    • Максимальное количество вводимых символов 7;
    • При нажатии кнопки «Вывести результат»
      выводится результат требуемой операции.

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

    Понравилась статья? Поделить с друзьями:
  • Tcp error как исправить
  • Как найти перпендикуляр опущенный к стороне основания
  • Как составить договор купли продажи недвижимости в мфц
  • Как найти упд по номенклатуре
  • Как найти цвет в powerpoint