Fortranでの計算の基本をマスターしよう!
Fortranプログラミングの旅、Step 2へようこそ! このステップでは、プログラムで計算を行うための基本的な要素、算術演算、代入文、そして比較演算子について学びます。これらは、データを処理し、条件に基づいてプログラムの流れを制御するための基礎となります。
1. 算術演算
コンピュータの得意なことといえば、計算ですよね! Fortranでは、私たちが普段使っている算数と同じように、足し算、引き算、掛け算、割り算、そしてべき乗(累乗)を行うことができます。これらの計算に使う記号を算術演算子と呼びます。
| 演算子 | 意味 | 例 | 結果 |
|---|---|---|---|
+ |
足し算 | 5 + 3 |
8 |
- |
引き算 | 10 - 4 |
6 |
* |
掛け算 | 6 * 7 |
42 |
/ |
割り算 | 10 / 2 |
5 (整数の場合) or 5.0 (実数の場合) |
** |
べき乗(累乗) | 2 ** 3 |
8 (2の3乗) |
演算子の優先順位
複数の演算子が式の中に含まれる場合、計算される順番が決まっています。これを演算子の優先順位といいます。
**(べき乗) が最も優先度が高い*(掛け算) と/(割り算) が次に高い+(足し算) と-(引き算) が最も低い- 同じ優先順位の演算子は、基本的に左から右へ計算されます。
計算順序を明示的に指定したい場合は、括弧 () を使います。括弧の中が先に計算されます。
整数 (
INTEGER型) 同士の割り算は、結果も整数になります。小数点以下は切り捨てられます。例えば、5 / 2 の結果は 2.5 ではなく 2 になります。小数点以下まで計算したい場合は、少なくとも一方の数値を実数 (REAL型) にする必要があります(例: 5.0 / 2 や 5 / 2.0)。
コード例
program arithmetic_example
implicit none
integer :: a, b, sum_result, diff_result
real :: x, y, product_result, div_result, power_result
integer :: int_div_result
! 整数演算
a = 10
b = 3
sum_result = a + b ! 足し算
diff_result = a - b ! 引き算
int_div_result = a / b ! 整数除算 (結果は 3)
! 実数演算
x = 10.0
y = 3.0
product_result = x * y ! 掛け算
div_result = x / y ! 実数除算
power_result = 2.0 ** 3.0 ! べき乗
! 結果の表示
write(*,*) '整数演算:'
write(*,*) 'a = ', a, ', b = ', b
write(*,*) 'a + b = ', sum_result
write(*,*) 'a - b = ', diff_result
write(*,*) 'a / b (整数) = ', int_div_result
write(*,*) ' ' ! 空行
write(*,*) '実数演算:'
write(*,*) 'x = ', x, ', y = ', y
write(*,*) 'x * y = ', product_result
write(*,*) 'x / y = ', div_result
write(*,*) '2.0 ** 3.0 = ', power_result
! 優先順位と括弧の例
write(*,*) ' ' ! 空行
write(*,*) '演算子の優先順位:'
write(*,*) '5 + 3 * 2 = ', 5 + 3 * 2 ! 掛け算が先 (11)
write(*,*) '(5 + 3) * 2 = ', (5 + 3) * 2 ! 括弧内が先 (16)
end program arithmetic_example
2. 代入文
計算結果や値を変数に保存するために使うのが代入文です。Fortranでは、等号 = を使って代入を行います。
書き方はとてもシンプルです。
変数名 = 式
これは、「右辺の式を計算(評価)し、その結果を左辺の変数に格納(代入)する」という意味になります。数学の等式とは少し意味合いが異なる点に注意してくださいね。プログラミングでは「代入」操作を表します。
例えば、変数 x に 10 を代入し、変数 y に x + 5 の計算結果を代入するには、次のように書きます。
program assignment_example
implicit none
integer :: x, y
x = 10 ! 変数 x に 10 を代入
y = x + 5 ! 変数 x の値(10) に 5 を足した結果(15)を 変数 y に代入
write(*,*) 'x = ', x ! 結果: x = 10
write(*,*) 'y = ', y ! 結果: y = 15
! 変数自身の値を使って更新も可能
x = x * 2 ! 変数 x の現在の値(10) を 2倍した結果(20) を 再度 x に代入
write(*,*) '新しい x = ', x ! 結果: 新しい x = 20
end program assignment_example
代入文では、右辺の式の型と左辺の変数の型が異なる場合があります。例えば、実数型の計算結果を整数型の変数に代入する場合などです。
integer :: ireal :: rr = 5.0 / 2.0 ! r には 2.5 が代入されるi = r ! i に r の値(2.5)を代入 → i には 2 が代入される (小数点以下切り捨て)このように、Fortranは可能な場合、自動的に型を変換して代入を行いますが、意図しない結果になる可能性もあるため注意が必要です。型の変換を明示的に行いたい場合は、
INT() や REAL() といった組み込み関数を使います。
3. 比較演算子
プログラムでは、「もし A が B より大きいなら〜する」のように、値同士を比較して条件分岐を行うことがよくあります。この比較に使うのが比較演算子です。
Fortran 90以降で推奨されている比較演算子は以下の通りです。
| 演算子 | 意味 | 例 (a=5, b=3 とする) | 結果 |
|---|---|---|---|
== |
等しい | a == b |
.FALSE. |
/= |
等しくない | a /= b |
.TRUE. |
> |
より大きい | a > b |
.TRUE. |
< |
より小さい | a < b |
.FALSE. |
>= |
以上 | a >= b |
.TRUE. |
<= |
以下 | a <= b |
.FALSE. |
比較演算の結果は、論理型 (LOGICAL) の値、つまり .TRUE. (真) または .FALSE. (偽) になります。
古いFortran (FORTRAN 77など) では、以下のような形式の比較演算子が使われていました。現在でも互換性のために利用できますが、新しいコードでは上記 (
==, /= など) を使うことが推奨されます。.EQ. (等しい), .NE. (等しくない), .GT. (より大きい), .LT. (より小さい), .GE. (以上), .LE. (以下)
コード例
比較演算子は、主に後で学ぶ IF 文などの条件分岐で使われます。ここでは簡単な比較の例を示します。
program comparison_example
implicit none
integer :: score = 75
logical :: is_passing, is_perfect
! 点数が60点以上かどうかを比較
is_passing = (score >= 60) ! score が 60 以上なら .TRUE.
! 点数が100点かどうかを比較
is_perfect = (score == 100) ! score が 100 と等しいなら .TRUE.
write(*,*) 'Score: ', score
write(*,*) 'Passing? (score >= 60): ', is_passing
write(*,*) 'Perfect? (score == 100): ', is_perfect
! IF文での簡単な使用例 (IF文の詳細は後続のステップで学びます)
if (is_passing) then
write(*,*) '合格です!'
else
write(*,*) '残念ながら不合格です。'
end if
end program comparison_example
まとめ
今回は、Fortranでの計算と値の扱いの基本となる、以下の3つを学びました。
- 算術演算子 (
+,-,*,/,**): 数値計算を行うための記号 - 代入文 (
=): 計算結果や値を格納するための命令 - 比較演算子 (
==,/=,>,<,>=,<=): 値同士を比較し、論理値 (.TRUE.or.FALSE.) を得るための記号
これらはプログラムを作成する上で非常に重要な要素です。特に算術演算と代入は、ほとんどのプログラムで使われます。比較演算子は、次のステップで学ぶ条件分岐 (IF文) や繰り返し処理 (DOループ) で活躍します。しっかり理解しておきましょう!
次のステップでは、条件によって処理を変える「IF文」と、特定の処理を繰り返す「DOループ」について学びます。お楽しみに!