평균 이상의 고장 시간 출력

파일의 행수를 입력하지 않고 파일을 분석하여 알아냄(자료의 개수를 알아냄)

allocatable array 사용

PROGRAM Failure

IMPLICIT NONE

REAL, DIMENSION(:), ALLOCATABLE :: FailureTime
INTEGER :: NumTimes, I, OpenStatus, InputStatus
REAL :: Sum, Mean_Time
CHARACTER(20) :: FileName

WRITE (*, '(1X, A)', ADVANCE = "NO") "자료 파일 이름(20자 이내)을 입력하시오 : "
READ *, FileName

OPEN (UNIT = 15, FILE = FileName, STATUS = "OLD", IOSTAT = OpenStatus)

IF (OpenStatus > 0) THEN
STOP "*** 파일을 열 수 없음 ***"
END IF

! 파일의 레코드 수를 알아 내기 위한 단계
NumTimes = 0

DO

READ (UNIT = 15, FMT = *, IOSTAT = InputStatus)

IF (InputStatus > 0) THEN
STOP "*** 입력 에러 ***" ! 프로그램 종료하기
END IF

IF (InputStatus < 0) THEN
EXIT ! DO 루프 빠져나가
END IF

NumTimes = NumTimes + 1

END DO


REWIND(UNIT = 15)

ALLOCATE(FailureTime(NumTimes))

DO I = 1, NumTimes

READ (UNIT = 15, FMT = *, IOSTAT = InputStatus) FailureTime(I)

IF (InputStatus > 0) THEN
STOP "*** 입력 에러 ***" ! 프로그램 종료하기
END IF

IF (InputStatus < 0) THEN
EXIT ! DO 루프 빠져나가
END IF

END DO

CLOSE(15)

Sum = 0.0

DO I = 1, NumTimes
Sum = Sum + FailureTime(I)
END DO

Mean_Time = Sum / REAL(NumTimes)
PRINT '(/ 1X, "Mean time to failure = ", F6.1)', Mean_Time

PRINT *
PRINT *, "List of failure time greater than the mean:"

DO I = 1, NumTimes
IF (FailureTime(I) > Mean_Time) THEN
PRINT '(1X, F9.1)', FailureTime(I)
END IF
END DO

END PROGRAM Failure

위 소스를 08_02_Failure2.f95 저장

데이터

99.5
133.8
84.2
217.5
188.8
103.1
93.9
165.0
68.3
111.
88.8
88.2
90.1
70.2
150.5
122.9
138.8
99.9
111.6
155.7
133.4
122.2
93.4
101.5
109.9
103.3
177.7
188.1
99.8
144.4
87.5
79.3
190.2
190.3
170.1
160.9
121.1
95.6
140.5
177.2
150.1
140.3
139.2
113.8
155.9
144.4
88.3
83.5
101.1
112.8

위 자료를 08_01_Failure.dat 로 저장

소스 컴파일 및 프로그램 테스트



+ Recent posts