The same index can select matching row and column positions on a matrix diagonal.

Program

Play the program to choose how many diagonal cells are included in the total.

diagonal_count
matrix_diagonal_sum.f90
Replay: real traced execution (multi-file project)
program matrix_diagonal_sum_demo
    implicit none
    integer :: matrix(3, 3)
    integer :: diagonal_count
    integer :: i
    integer :: total

    matrix = reshape([1, 4, 7, 2, 5, 8, 3, 6, 9], [3, 3])
    diagonal_count = 3
    total = 0
    do i = 1, diagonal_count
        total = total + matrix(i, i)
    end do
    print '(I0, 1X, I0)', diagonal_count, total
end program matrix_diagonal_sum_demo
program matrix_diagonal_sum_demo
    implicit none
    integer :: matrix(3, 3)
    integer :: diagonal_count
    integer :: i
    integer :: total

    matrix = reshape([1, 4, 7, 2, 5, 8, 3, 6, 9], [3, 3])
    diagonal_count = 1
    total = 0
    do i = 1, diagonal_count
        total = total + matrix(i, i)
    end do
    print '(I0, 1X, I0)', diagonal_count, total
end program matrix_diagonal_sum_demo
program matrix_diagonal_sum_demo
    implicit none
    integer :: matrix(3, 3)
    integer :: diagonal_count
    integer :: i
    integer :: total

    matrix = reshape([1, 4, 7, 2, 5, 8, 3, 6, 9], [3, 3])
    diagonal_count = 2
    total = 0
    do i = 1, diagonal_count
        total = total + matrix(i, i)
    end do
    print '(I0, 1X, I0)', diagonal_count, total
end program matrix_diagonal_sum_demo
  1. matrix ← [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

    8matrix = reshape([1, 4, 7, 2, 5, 8, 3, 6, 9], [3, 3])9diagonal_count = 3
    values this step[[1, 2, 3], [4, 5, 6], [7, 8, 9]]matrix
  2. diagonal_count ← 3

    8matrix = reshape([1, 4, 7, 2, 5, 8, 3, 6, 9], [3, 3])9diagonal_count = 310total = 0
    values this step3diagonal_count
  3. total ← 0

    9diagonal_count = 310total = 011do i = 1, diagonal_count
    values this step0total
  4. i ← 1

    10total = 011do i = 1, diagonal_count12    total = total + matrix(i, i)
    values this step1i
  5. total ← 1

    11do i = 1, diagonal_count12    total = total + matrix(i, i)13end do
    values this step0 1total1matrix(1,1)
  6. i ← 2

    10total = 011do i = 1, diagonal_count12    total = total + matrix(i, i)
    values this step2i
  7. total ← 6

    11do i = 1, diagonal_count12    total = total + matrix(i, i)13end do
    values this step1 6total5matrix(2,2)
  8. i ← 3

    10total = 011do i = 1, diagonal_count12    total = total + matrix(i, i)
    values this step3i
  9. total ← 15

    11do i = 1, diagonal_count12    total = total + matrix(i, i)13end do
    values this step6 15total9matrix(3,3)
  10. print '(I0, 1X, I0)', diagonal_count, total

    13    end do14    print '(I0, 1X, I0)', diagonal_count, total15end program matrix_diagonal_sum_demo
    output3 15
    values this step3diagonal_count15total
  1. matrix ← [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

    8matrix = reshape([1, 4, 7, 2, 5, 8, 3, 6, 9], [3, 3])9diagonal_count = 1
    values this step[[1, 2, 3], [4, 5, 6], [7, 8, 9]]matrix
  2. diagonal_count ← 1

    8matrix = reshape([1, 4, 7, 2, 5, 8, 3, 6, 9], [3, 3])9diagonal_count = 110total = 0
    values this step1diagonal_count
  3. total ← 0

    9diagonal_count = 110total = 011do i = 1, diagonal_count
    values this step0total
  4. i ← 1

    10total = 011do i = 1, diagonal_count12    total = total + matrix(i, i)
    values this step1i
  5. total ← 1

    11do i = 1, diagonal_count12    total = total + matrix(i, i)13end do
    values this step0 1total1matrix(1,1)
  6. print '(I0, 1X, I0)', diagonal_count, total

    13    end do14    print '(I0, 1X, I0)', diagonal_count, total15end program matrix_diagonal_sum_demo
    output1 1
    values this step1diagonal_count1total
  1. matrix ← [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

    8matrix = reshape([1, 4, 7, 2, 5, 8, 3, 6, 9], [3, 3])9diagonal_count = 2
    values this step[[1, 2, 3], [4, 5, 6], [7, 8, 9]]matrix
  2. diagonal_count ← 2

    8matrix = reshape([1, 4, 7, 2, 5, 8, 3, 6, 9], [3, 3])9diagonal_count = 210total = 0
    values this step2diagonal_count
  3. total ← 0

    9diagonal_count = 210total = 011do i = 1, diagonal_count
    values this step0total
  4. i ← 1

    10total = 011do i = 1, diagonal_count12    total = total + matrix(i, i)
    values this step1i
  5. total ← 1

    11do i = 1, diagonal_count12    total = total + matrix(i, i)13end do
    values this step0 1total1matrix(1,1)
  6. i ← 2

    10total = 011do i = 1, diagonal_count12    total = total + matrix(i, i)
    values this step2i
  7. total ← 6

    11do i = 1, diagonal_count12    total = total + matrix(i, i)13end do
    values this step1 6total5matrix(2,2)
  8. print '(I0, 1X, I0)', diagonal_count, total

    13    end do14    print '(I0, 1X, I0)', diagonal_count, total15end program matrix_diagonal_sum_demo
    output2 6
    values this step2diagonal_count6total
two indexes `matrix(i, i)` reads one row and one column with the same index.
diagonal The main diagonal contains positions `(1,1)`, `(2,2)`, and `(3,3)`.
loop bound Changing the loop bound changes how much of the diagonal is included.