不必要なDO文

私がアシスタントを担当する授業で課題として出されたFORTRAN77の問題がありましてですね、

0~100までの整数値を読み込んで、90以上であれば5、75以上90未満であれば4、60以上75未満であれば3、60未満は0と出力するプログラムを作れ。

っていうものがあったんですね。
そのまま普通に解釈していただくと、例えば「74」と打てば「3」と出力され、「94」と打てば「5」が出力されるように組めばいいわけなんですが、何を血迷ったのか講師の方が「先週は100個のデータを読みこんだので今日は2倍の200個にしましょう」とか意味不明なことを言い出したわけですよ。
ちなみにその先週の問題とやらは

n個(n≧1)の0~100までの整数を読み込んで、値が60以上のデータの個数を求めるプログラムを作れ。個数nは最初に読み込むものとする。

だったので、100個とか読み込んでも何の不思議もなかったわけですが、今回のは問題を見てわかるようにカウントもしなければDO文を使う要素もありません…
でも200個読み込ませるという風になったので、結局そういうコードを書くことになったわけです…
一応そのコードの記述例は次の通り。

C======================================================================
C if_sample.for
C---+-7--+----+----+----+----+----+----+----+----+----+----+----+----+-|
      IMPLICIT NONE
      INTEGER I, NUM
      
      DO 10 I=1,200
        READ(*,*) NUM
        IF(NUM.GE.90) THEN
          WRITE(*,*) 5
        ELSEIF(NUM.GE.75) THEN
          WRITE(*,*) 4
        ELSEIF(NUM.GE.60) THEN
          WRITE(*,*) 3
        ELSE
          WRITE(*,*) 0
        ENDIF
   10 CONTINUE
      
      STOP
      END

まぁこれが完璧な答えってわけでもありませんが、一応問題の主旨は満たしてはいますのでOKということで。
で、当然ながら200個も入力してらんないので、Excelで乱数を生成しておいてテキストファイルに保存し、リダイレクトでデータを与えてやるか、または該当授業ではWATCOM社のFORTRAN77コンパイラを使っていますので、ENDの1~2個下の行あたりの1カラム目から「C$DATA」と書いておいて、その下に200個の整数値を書いておけばOKです。

で、こやつを実行するとどうなるかというと、単に与えられたデータがIF文で篩いに掛けられて「0」「3」「4」「5」のどれかが出力されるだけなんですがね・・・
というかこの問題、そもそもDO文が全くいらない、単純なサービス問題なはずなんですがね…
これで90以上の個数、75以上90未満の個数、60以上75未満の個数、60未満の個数をカウントするっていうのであればDO文は必要ですが、カウントなんて一言も書いてませんし思いつきで200個になっているのでやっぱり不必要なDO文…
ちなみに今日の学習事項はブロックIF文・・・orz

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中