평균 이상의 고장 시간 출력
파일의 행수를 입력하지 않고 파일을 분석하여 알아냄(자료의 개수를 알아냄)
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 로 저장
소스 컴파일 및 프로그램 테스트
'Programming > Fortran' 카테고리의 다른 글
신속정렬(Quick Sort) (0) | 2008.09.22 |
---|---|
선택 정렬 (0) | 2008.09.17 |
배열 스왑(자동 할당 배열) (1) | 2008.09.17 |
평균 계산(Assumed-Shape Array, 형상가정 배열 사용) (0) | 2008.09.17 |
평균 계산(함수의 인자로 배열 사용) (0) | 2008.09.16 |