재귀 서브루틴을 이용한 하노이 탑 이동
PROGRAM Hanoi
IMPLICIT NONE
CHARACTER(*), PARAMETER :: Peg1 = "A", Peg2 = "B", Peg3 = "C"
INTEGER :: Number_of_Disks
WRITE (*, '(1X, A)', ADVANCE = "NO"), "디스크 수를 입력하시오(ex:3) : "
READ *, Number_of_Disks
PRINT *
CALL MOVE(Number_of_Disks, Peg1, Peg2, Peg3)
CONTAINS
RECURSIVE SUBROUTINE Move(N, StartPeg, AuxPeg, EndPeg)
INTEGER, INTENT(IN) :: N
CHARACTER(*), INTENT(IN) :: StartPeg, AuxPeg, EndPeg
IF (N == 1) THEN
PRINT *, "Move disk from ", StartPeg, " to ", EndPeg
ELSE
CALL Move(N - 1, StartPeg, EndPeg, AuxPeg)
CALL Move(1, StartPeg, " ", EndPeg)
CALL Move(N - 1, AuxPeg, StartPeg, EndPeg)
END IF
END SUBROUTINE Move
END PROGRAM Hanoi
위 소스를 07_09_Hanoi.f95로 저장
컴파일 및 프로그램 테스트
'Programming > Fortran' 카테고리의 다른 글
평균이상의 고장 시간 출력(allocatable array 이용) (0) | 2008.09.16 |
---|---|
평균 이상의 고장 시간 출력(배열 이용) (0) | 2008.09.16 |
사다리꼴 적분 근사(내부 프로그램을 서브루틴의 인수로 사용) (0) | 2008.09.15 |
사다리꼴 적분 근사(외부 프로그램을 서브루틴의 인수로 사용) (0) | 2008.09.15 |
사다리꼴 적분 근사(모듈을 서브루틴의 인수로 사용) (0) | 2008.09.15 |