はじめに
第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回は書式設定です。