C++ Program to Compute the Sum of Diagonals of a Matrix


The utilization of 2-dimensional arrays or matrices is extremely advantageous for several applications. Matrix rows and columns are used to hold numbers. We can define 2D matrices in C++ using multi-dimensional arrays as well. In this article, we'll look at how to use C++ to calculate the diagonal sum of a given square matrix.

The matrices have two diagonals, the main diagonal and the secondary diagonal (sometimes referred to as major and minor diagonals). The major diagonal starts from the top-left corner (index [0, 0]) to the bottom-right corner (index [n-1, n-1]) where n is the order of the square matrix. The major diagonal starts from top-right corner (index [n-1, 0]) to bottom-left corner (index [0, n-1]). Let us see the algorithm to find the sum of the elements along with these two diagonals.

Matrix Diagonal Sum

$$\begin{bmatrix} 8 & 5& 3\newline 6 & 7& 1\newline 2 & 4& 9\ \end{bmatrix},$$

Sum of all elements in major diagonal: (8 + 7 + 9) = 24
Sum of all elements in minor diagonal: (3 + 7 + 2) = 12

In the previous example, one 3 x 3 matrix was used. We have scanned the diagonals individually and calculated the sum. Let us see the algorithm and implementation for a clear view.

Algorithm

  • read matrix M as input
  • consider M has n rows and n columns
  • sum_major := 0
  • sum_minor := 0
  • for i ranging from 0 to n - 1, do
    • for j rangign from 0 to n - 1, do
      • if i and j are the same, then
        • sum_major := sum_major + M[ i ][ j ]
      • end if
      • if (i + j) is same as (N - 1), then
        • sum_minor := sum_minor + M[ i ][ j ]
      • end if
    • end for
  • end for
  • return sum

Example

#include <iostream>
#include <cmath>
#define N 7
using namespace std;
float solve( int M[ N ][ N ] ){
   int sum_major = 0;
   int sum_minor = 0;
   for ( int i = 0; i < N; i++ ) {
      for ( int j = 0; j < N; j++ ) {
         if( i == j ) {
            sum_major = sum_major + M[ i ][ j ];
         }
         if( (i + j) == N - 1) {
            sum_minor = sum_minor + M[ i ][ j ];
         }
      }
   }
   cout << "The sum of major diagonal: " << sum_major << endl;
   cout << "The sum of minor diagonal: " << sum_minor << endl;
}
int main(){
   int mat1[ N ][ N ] = {
      {5, 8, 74, 21, 69, 78, 25},
      {48, 2, 98, 6, 63, 52, 3},
      {85, 12, 10, 6, 9, 47, 21},
      {6, 12, 18, 32, 5, 10, 32},
      {8, 45, 74, 69, 1, 14, 56},
      {7, 69, 17, 25, 89, 23, 47},
      {98, 23, 15, 20, 63, 21, 56},
   };
   cout << "For the first matrix: " << endl;
   solve( mat1 );
   int mat2[ N ][ N ] = {
      {6, 8, 35, 21, 87, 8, 26},
      {99, 2, 36, 326, 25, 24, 56},
      {15, 215, 3, 157, 8, 41, 23},
      {96, 115, 17, 5, 3, 10, 18},
      {56, 4, 78, 5, 10, 22, 58},
      {85, 41, 29, 65, 47, 36, 78},
      {12, 23, 87, 45, 69, 96, 12}
   };
   cout << "\nFor the second matrix: " << endl;
   solve( mat2 );
}

Output

For the first matrix: 
The sum of major diagonal: 129
The sum of minor diagonal: 359

For the second matrix: 
The sum of major diagonal: 74
The sum of minor diagonal: 194

Conclusion

In this article, we have seen how to calculate the diagonal sums of a given square matrix. The major diagonal starts from the top-left corner to the bottom-right corner and the minor diagonal starts from the top-right corner to the bottom-left corner. To find the sum of these diagonal elements, we loop through all elements. When both row and column index values are the same, it indicates the major diagonal element, and when the sum of two indices is the same as n – 1 where n is the order of the matrix, it will add to the minor diagonal. This procedure takes two nested loops and we are traversing through all elements present in the 2D array. So it will take O(n2) amount of time to compute the sum of two diagonals of the given matrix.

Updated on: 14-Dec-2022

4K+ Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements