Fortranが数値計算に適している理由のひとつとして、配列操作がシンプル、かつ、数式に近い表現ということが挙げられます。
この記事では配列の基本操作について説明します。
記事の最後にサンプルプログラムを掲載しています。
配列の宣言
配列の宣言は以下のように行います。配列1と配列2は配列名です。
配列の型 :: 配列1(下限:上限)__________! 1次元配列
配列の型 :: 配列2(下限:上限,下限:上限)__! 2次元配列
配列の範囲は以下のように、定数を用いて定義することもできます。
integer, parameter :: n = 3___! 整数(integer)型, 定数(parameter)属性
配列の型 :: 配列1(1:n)
配列の初期化
配列の初期化は以下のように行います。
・全ての要素に同じ値を入れる場合
いくつかの書き方ができますが、全て同じ結果になります。
配列1 = 0
配列1(:) = 0
配列1(下限:上限) = 0
・各要素に異なる値を入れる場合
配列の下限と上限が1~3である場合を例にとると、以下のように書けます。
配列1(1) = 10
配列1(2) = 20
配列1(3) = 30
配列構成子を使って以下のように書くこともできます。
配列1(1:3) = (/10,20,30/)___! (1:3)は省略可、(:)とも書ける
配列の演算
要素ごとの演算は以下のように記述します。
配列3(1) = 配列1(1) + 配列2(1)
配列3(2) = 配列1(2) + 配列2(2)
配列3(3) = 配列1(3) + 配列2(3)
以下のように記述することで上記の3行と同じ意味になります。
配列3(1:3) = 配列1(1:3) + 配列2(1:3)___! (1:3)は省略可、(:)とも書ける
配列の出力
配列の出力は以下のように記述します。
write(*,*) 配列1(1), 配列1(2), 配列1(3)
以下のように書いても同じ結果になります。
write(*,*) (配列1(i), i = 1, 3)
配列のちょっとしたtips
tipsを以下に列挙します。読みやすいプログラムを書くときに役に立つと思うので、頭の片隅に置いておいて下さいね。
・配列宣言をするとき、下限は省略可能です。省略した場合は下限=1になります。しかし、読みやすさの観点からは、下限の省略はしないほうが良いです。
・配列3(:) = ・・・のような省略表記は便利ですが、可読性の低下(特に高次元配列)や、高速化や並列化の妨げになる場合があります。省略表記は初期値入力の場合のみにとどめておくことが無難と思われます。
サンプルプログラム
サンプルプログラムを下記します。4-7行目は配列の型宣言、9-16行目は配列に初期値を代入、18-20行目は配列の演算、22-23行目は配列の出力です。
以下のFortranプログラムをコピペし、****.f90の名前で保存して下さい(****の部分は適当でいいです)。コピペが面倒な場合は、こちらからダウンロードして下さい(右クリックメニューから保存)。→ sample08.f90
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | program sample08 implicit none !-------------------------------------------------------------------- integer, parameter :: n = 3 integer :: i real(8) :: x(1:n), y(1:n), z(1:n) character(len=3) :: o(1:n) !-------------------------------------------------------------------- x(1) = 10.0d0 x(2) = 20.0d0 x(3) = 30.0d0 y(1:3) = (/40.0d0,50.0d0,60.0d0/) ! 配列構成子を使用 z = 0.0d0 ! 省略表記 o(1) = 'dog' o(2) = 'cat' o(3) = 'pig' !-------------------------------------------------------------------- z(1) = x(1) + y(1) z(2) = x(2) + y(2) z(3) = x(3) + y(3) !-------------------------------------------------------------------- write(*,'(3f5.1)') (z(i), i = 1, 3) write(*,'(3(a,1x))') (o(i), i = 1, 3) end program sample08 |
使い方は、前記事と同様に、****.f90を以下の****.batにドラッグ&ドロップするだけです。
64bit用 → comp_exe_64.bat
32bit用 → comp_exe_32.bat
こんな画面が出たでしょうか?出ていれば正常終了です。9-16行目の値を変えて、色々試してみて下さい。
→ 次の記事へ(副プログラム)
← 前の記事へ(繰り返し(do))
目次(Fortran90)