FORTRAN用のプログラミング学習アプリとして、Web上で編集可能な擬似エディタを制作してみました。制作したアプリの見た目は以下です。(左:擬似エディタ、右:検索アプリ)


このアプリは、スマホのみでコードを編集できます。また、エディタ内にコード検索アプリも合わせて搭載した仕様となります。なお、擬似エディタ故に、再現できるコードは限られていますが、プログラミング初心者の方の登竜門としてご活用いただけますと幸いです。
概要
以降の記事では、5人の成績を集計して「合格・不合格」を判定するサンプルコードを例として、プログラミングの基本的な流れを解説します。この流れを意識すると、プログラミングの基本構成が理解できるようになるかと思います。
program main 〜 end program main の中にコードを書きます。implicit none は「宣言していない変数は使えない」という指定で、入力ミスの防止になるため必ず書きます。
- 人物A〜Eの3科目の点数を読み込む
- 3科目の合計と平均を計算する
- 平均が60点以上なら「合格」、未満なら「不合格」と判定する
- 合計点が一番高い最高得点者を探す
- 結果を出力する
START
print *, “…” は、コンソールにメッセージを表示する命令です。処理が始まったことが分かるので、動作確認のときに便利です。! から行末まではコメント(メモ書き)になり、処理には影響しません。
! START
print *, "成績集計を開始します"


INITIAL
Fortranでは変数の宣言をプログラムの先頭にまとめます。
- character(len=12) :: names(5):最大12バイトの文字を5人分入れる配列です。
- integer :: scores(5, 3):5人×3科目の整数の2次元配列です。
- integer :: total(5) / real :: average(5):合計(整数)と平均(実数)の配列です。
- topName / topTotal:最高得点者の名前と点数を覚えておく箱です。
- 型は integer(整数)、real(小数)、character(文字)を使います。
! INITIAL
character(len=12) :: names(5)
character(len=12) :: judge(5)
character(len=12) :: topName
integer :: scores(5, 3)
integer :: total(5)
integer :: topTotal
integer :: i
real :: average(5)
READ
配列に値を代入していきます。配列の要素は names(1)、scores(1, 2) のように ( ) で番号を指定します。番号は1から始まります。最後に topName = “”、topTotal = 0 で、最高得点者の初期値(空と0)を設定します。
! READ
names(1) = "人物A"
scores(1, 1) = 80
scores(1, 2) = 70
・
・
・
MAIN
do i = 1, 5 〜 end do は繰り返しの命令です。変数 i が1から5まで変化しながら、中の処理を5回くり返します。
! MAIN
do i = 1, 5
・
・
・
end do
CALCULATE
total(i) に3科目を足して合計を出します。average(i) = total(i) / 3.0 で平均を出します。
! CALCULATE
total(i) = scores(i, 1)
+ scores(i, 2)
+ scores(i, 3)
average(i) = total(i) / 3.0
ANALYSIS
if (average(i) >= 60.0) then 〜 else 〜 end if で、平均が60点以上なら「合格」、そうでなければ「不合格」を judge(i) に入れます。
! ANALYSIS
if (average(i) >= 60.0) then
judge(i) = "合格"
else
judge(i) = "不合格"
end if
total(i) > topTotal なら、最高点と名前を更新します。5人全員を見終わると、一番高い人が残ります。
if (total(i) > topTotal) then
topTotal = total(i)
topName = names(i)
end if
WRITE
write (*, ‘(A, 2X, I4, 2X, F5.1, 2X, A)’) は、書式を指定した出力です。A は文字、I4 は4桁の整数、F5.1 は全体5桁・小数第1位までの実数です。たとえば人物Aの平均71.666…は71.7と表示されます。2X は空白2つ分です。
trim() は文字の後ろの余分な空白を取り除きます。これを do で5人分くり返して、1人1行で表示します。
! WRITE
do i = 1, 5
write (*, '(A, 2X, I4, 2X, F5.1, 2X, A)') trim(names(i)), total(i), average(i), trim(judge(i))
end do
END
最高得点者を write で表示して終了です。A(文字)と I3(3桁の整数)を組み合わせて、「最高得点者:人物C (合計:267点)」のように出力します。
! END
write (*, '(A, A, A, I3, A)') "最高得点者:", trim(topName), " (合計:", topTotal, "点)"




コメント