PROGRAM arrseq IMPLICIT NONE ! INTEGER, PARAMETER :: NMAX=200 INTEGER :: N, i ! DOUBLE PRECISION :: S(0:NMAX) DOUBLE PRECISION, ALLOCATABLE :: S(:) PRINT *, 'Enter the last sequence number to compute (0<=N<=200):' READ *, N IF (N .LT. 0) THEN PRINT *, 'FATAL ERROR: N should be greater than 0, but you entered:', N STOP END IF ! IF (N .GT. NMAX) THEN ! WRITE (*,1000) N ! STOP ! END IF ALLOCATE(S(0:N)) PRINT *, 'Enter S0 and S1 separated by space' READ *, S(0:1) WRITE (*,2000) 0, S(0) IF (N .LT. 1) STOP WRITE (*,2000) 1, S(1) IF (N .LT. 2) STOP ! not necessary DO i = 2, N S(i) = 100.0*S(i-2) + S(i-1) WRITE (*,2000) i, S(i) END DO DEALLOCATE(S) ! 1000 FORMAT('FATAL ERROR: increase NMAX to at least', i5, ' and recompile!') 2000 FORMAT('S(', i5, ') = ', ES68.40) END PROGRAM arrseq