多重ループ - nested loop(Fortran 第3回)

←第2回 組み込み関数
→第4回 書式設定

はじめに

第3回は多重ループです。
多重でない単体のループに関しては解説していませんでしたが、多重ループの例を見ていただければ理解できると思います。

多重ループとは

ループの内部にほかのループを配置する構造のことで、多次元のデータに対して有効です。

多重ループの解説

ループ処理は具体例1のようにdo~end doのブロックでひとまとまりで、
i = (始め), (終わり) のように回数を指定できます。
具体例1(どのような順番でループが実行されるか表示)

program nestedLoopsExample
    implicit none
    integer :: i, j

    ! Outer loop
    do i = 1, 3
        ! Inner loop
        do j = 1, 3
            ! Print the values of i and j
            print *, 'i =', i, 'j =', j
        end do
    end do
end program nestedLoopsExample

上の例よりも現実的な例として、行列に作用する多重ループのコードを具体例2を挙げます。
具体例2(行列に作用)

program rowSumExample
    implicit none
    integer, dimension(3, 3) :: matrix
    integer, dimension(3) :: rowSums
    integer :: i, j

    ! Initialize the matrix with some values
    matrix = reshape([1, 2, 3, 4, 5, 6, 7, 8, 9], shape=[3, 3])

    ! Calculate the sum of each row using nested loops
    do i = 1, 3
        rowSums(i) = 0
        do j = 1, 3
            rowSums(i) = rowSums(i) + matrix(i, j)
        end do
    end do

    ! Print the sum of each row
    do i = 1, 3
        print *, 'Sum of row', i, '=', rowSums(i)
    end do
end program rowSumExample

この例は、まず行列を作成した後に、一次元の配列を作って、行列の各行の和を一次元の配列の要素に代入されるようループで計算するというコードです。

まとめ

多重ループはほかの言語でもよく出てくるので特に難しくはないはずです。Fortranはループ単体の書き方も非常にシンプルで書きやすいですね。
第4回は書式設定です。

←第2回 組み込み関数
→第4回 書式設定