DO文

水曜日はアシストする側としては精神的に楽なんですが、担当講師の方が現状の生徒の習熟度を考慮して方針を変えてしまい、少し変なことに…
普通、FORTRANでは反復 (DO文) を書くときは

      DO 10 K = 1, 100, 2
          複数の式
10   CONTINUE

      DO K = 1, 100, 2
          複数の式
      END DO

みたいな書き方をすると思いますが、本日は次のような方法を使わせていました。

C******************************************************************************
C 1128_02.for :
C******************************************************************************
C 2007/11/28 課題2
C 
C 奇数 N (N > 1) を読み込み、
C 1 + 3 + 5 + 7 + ... + N を計算するプログラムを書け。
C******************************************************************************
C---+-7--+----+----+----+
      IMPLICIT NONE
      
      INTEGER N, K, S
      
      K = 1
      S = 0
      
      WRITE(*,*) 'INPUT ODD NUMBER N'
      READ(*,*) N
      
      IF( N .LE. 1 ) STOP              ! N が 1 以下のときは終了
       IF( MOD( N, 2 ) .EQ. 0 ) STOP    ! N が偶数のときは終了(今回は書かなくてもOK)
       
       DO
          IF( K .GT. N ) EXIT
          
          S = S + K
          K = K + 2
          
      END DO
      
      WRITE(*,*) S
      
      STOP
      END

つまりDO文の制御変数を使わずに自分でカウンターを作って、かつIF文を使った条件式でループを止めてしまおうと。
この方法をとるとは思っていなかったので、数人の子にDO文の制御変数で教えちゃった…orz
ちなみに制御変数を使うと

C******************************************************************************
C 1128_02.for :
C******************************************************************************
C 2007/11/28 課題2
C 
C 奇数 N (N > 1) を読み込み、
C 1 + 3 + 5 + 7 + ... + N を計算するプログラムを書け。
C******************************************************************************
C---+-7--+----+----+----+
      IMPLICIT NONE
      
      INTEGER N, K, S
      
      S = 0
      
      WRITE(*,*) 'INPUT ODD NUMBER N'
      READ(*,*) N
      
      IF( N .LE. 1 ) STOP              ! N が 1 以下のときは終了
       IF( MOD( N, 2 ) .EQ. 0 ) STOP    ! N が偶数のときは終了(今回は書かなくてもOK)
      
       DO K = 1, N, 2
          
          S = S + K
          
      END DO
      
      WRITE(*,*) S
      
      STOP
      END

になるだけなんですけどね。
ん~、先生は上のほうに方針を変えちゃったけど、実際のところどっちがいいんだろう。
そもそも、方針を変えなきゃいけなくなってるのが問題なんですけどね。

コメントを残す

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

WordPress.com ロゴ

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

Twitter 画像

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

Facebook の写真

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

Google+ フォト

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

%s と連携中