情報科学概論
2001.5.8の復習課題 解答例およびコメント



課題

1868年以降2001年までの西暦と月を指定すると元号に直すスクリプトを作成せよ。ただし、ターミナルのコマンドラインから年号と月を入力する方法はまだ学習していないのでスクリプト上に変数としてあらかじめ記述しておくこと。例えば、スクリプト上に

year = 1958
month = 9

と言うように定義されていたとすると以下の例のように

$ ruby task5-8.rb
昭和 33 年 9 月

のように表示されるものである。そのような出力形式を行うためには教科書のp.23にあるprintを使う必要があるので予習が必要である。また、主に使用するのはif構文となる。初めに年を判断して元号を決めるが、元号切り替わりの年は月まで含めた判断をする必要があるため、多重の構成となる。(endの使い方に注意するのを忘れずに。)いきなりではちょっと難しいけど挑戦してみよう。なお、以下のような元号切り替えを使うこととする。

作成したスクリプトは動作を確認したらメールの本文に記述すること。添付形式を使用しないように注意。


解答例およびコメント

この例題は、ただひたすらifによる条件判定、printによる表示、の繰り返しだけを行うものであったので、中身は単純であるがどれだけ正確にスクリプトを書けるか、を問うものであった。その結果、元号の切り替え年を正確に入れていない、print文の中身が正確でない、という理由から不合格としたものが多かった。細かいところにまで注意が行き届くかどうかの判定に利用した。また、1968-2001年以外の西暦に関する例外処理は今回は合否判断には含めていない。

実際のスクリプト

year = 1868
month = 12

if year < 1912
  print "明治 ", year - 1867, "年 ", month, "月\n"
else
  if year == 1912
    if month < 8
      print "明治 ", year - 1867, "年 ", month, "月\n"
    else
      print "大正 ", year - 1911, "年 ", month, "月\n"
    end
  else
    if year < 1926
      print "大正 ", year - 1911, "年 ", month, "月\n"
    else
      if year == 1926
        if month < 12
          print "大正 ", year - 1911, "年 ", month, "月\n"
        else
          print "昭和 ", year - 1925, "年 ", month, "月\n"
        end
      else
        if year < 1989
          print "昭和 ", year - 1925, "年 ", month, "月\n"
        else
          print "平成 ", year - 1988, "年 ", month, "月\n"
        end
      end
    end
  end
end
アルゴリズムとしては以下のようなものを採用している。

  1. 1911年以前か?(明治の判定)
  2. 1911年か?(明治と大正の判定)
  3. 1926年以前か?(大正の判定)
  4. 1926年か?(大正と昭和の判定)
  5. 1988年以前か?(昭和の判定)
  6. 上記以外か?(平成の判定)


解答の案内ページに戻る