! 例題 9-1 極値の位置を探す [グローバル変数定義モジュール ] MODULE comm IMPLICIT NONE INTEGER, PARAMETER :: imax = 720 REAL, PARAMETER :: pi = 3.1415926E0 REAL :: curv( 1 : imax ) END MODULE comm ! Main文 PROGRAM ex9_1 IMPLICIT NONE CALL input() CALL trans() END PROGRAM ex9_1 ! 周期的なデータを作成する SUBROUTINE input() USE comm, ONLY : imax, curv, pi IMPLICIT NONE INTEGER :: i REAL :: deg, rad deg = 0E0 DO i = 1, imax deg = deg + 1E0 rad = deg * 2E0 * pi / 360E0 ! 角度からラジアンに変換する curv(i) = SIN( rad ) - COS( rad ) END DO END SUBROUTINE input ! 極値をもつcurvの位置を探索する(ただし,最初と最後は除く) SUBROUTINE trans() USE comm, ONLY : imax, curv IMPLICIT NONE INTEGER :: i REAL :: diffc DO i = 2, imax - 1 ! 極値をもつ場合,その前後の傾きを掛けると負となる diffc = ( curv( i - 1 ) - curv( i ) ) & * ( curv( i ) - curv( i + 1 ) ) IF ( diffc < 0E0 ) THEN PRINT '( 1X, I4, 1X, 1P, E10.3 )', i, curv( i ) END IF END DO END SUBROUTINE trans