【スマホで完結】 FORTRAN向け擬似エディタ

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

>> 制作したアプリはこちら

このアプリは、スマホのみでコードを編集できます。また、エディタ内にコード検索アプリも合わせて搭載した仕様となります。なお、擬似エディタ故に、再現できるコードは限られていますが、プログラミング初心者の方の登竜門としてご活用いただけますと幸いです。

目次

概要

以降の記事では、5人の成績を集計して「合格・不合格」を判定するサンプルコードを例として、プログラミングの基本的な流れを解説します。この流れを意識すると、プログラミングの基本構成が理解できるようになるかと思います。

program main 〜 end program main の中にコードを書きます。implicit none は「宣言していない変数は使えない」という指定で、入力ミスの防止になるため必ず書きます。

  • 人物A〜Eの3科目の点数を読み込む
  • 3科目の合計と平均を計算する
  • 平均が60点以上なら「合格」、未満なら「不合格」と判定する
  • 合計点が一番高い最高得点者を探す
  • 結果を出力する
Fortran コード
program main
    implicit none

    ! START
    print *, "成績集計を開始します"

    ! 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) = "人物A"
    scores(1, 1) = 80
    scores(1, 2) = 70
    scores(1, 3) = 65
    names(2) = "人物B"
    scores(2, 1) = 55
    scores(2, 2) = 60
    scores(2, 3) = 48
    names(3) = "人物C"
    scores(3, 1) = 90
    scores(3, 2) = 85
    scores(3, 3) = 92
    names(4) = "人物D"
    scores(4, 1) = 40
    scores(4, 2) = 55
    scores(4, 3) = 50
    names(5) = "人物E"
    scores(5, 1) = 70
    scores(5, 2) = 75
    scores(5, 3) = 68

    topName = ""
    topTotal = 0

    ! MAIN
    do i = 1, 5
        ! 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
            judge(i) = "合格"
        else
            judge(i) = "不合格"
        end if
        if (total(i) > topTotal) then
            topTotal = total(i)
            topName = names(i)
        end if
    end do

    ! 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, A, A, I3, A)') "最高得点者:", trim(topName), " (合計:", topTotal, "点)"
end program main

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, "点)"
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次