In data processing, the year, month and day information are usually written as yyyymmdd, where the first four digits are Year, the fifth and sixth digits are Month, and the last two digits are Day. For example, 19710428 means April 8, 1971, and 20000101 means January 1, 2000.
Write a program to read an integer in the form of yyyymmdd and extract the values of Year, Month and Day. Do it with an external subroutine.
Click here to download this program.! -------------------------------------------------------------------- ! PROGRAM YYYYMMDDConversion: ! This program uses an external subroutine Conversion() to convert ! an integer value in the form of YYYYMMDD to Year, Month and Day. ! -------------------------------------------------------------------- PROGRAM YYYYMMDDConversion IMPLICIT NONE INTERFACE ! interface block SUBROUTINE Conversion(Number, Year, Month, Day) INTEGER, INTENT(IN) :: Number INTEGER, INTENT(OUT) :: Year, Month, Day END SUBROUTINE Conversion END INTERFACE INTEGER :: YYYYMMDD, Y, M, D DO ! loop until a zero is seen WRITE(*,*) "A YYYYMMDD (e.g., 19971027) please (0 to stop) -> " READ(*,*) YYYYMMDD ! read in the value IF (YYYYMMDD == 0) EXIT ! if 0, then bail out CALL Conversion(YYYYMMDD, Y, M, D) ! do conversation WRITE(*,*) "Year = ", Y ! display results WRITE(*,*) "Month = ", M WRITE(*,*) "Day = ", D WRITE(*,*) END DO END PROGRAM YYYYMMDDConversion ! -------------------------------------------------------------------- ! SUBROUTINE Conversion(): ! This external subroutine takes an integer input Number in the ! form of YYYYMMDD and convert it to Year, Month and Day. ! -------------------------------------------------------------------- SUBROUTINE Conversion(Number, Year, Month, Day) IMPLICIT NONE INTEGER, INTENT(IN) :: Number INTEGER, INTENT(OUT) :: Year, Month, Day Year = Number / 10000 Month = MOD(Number, 10000) / 100 Day = MOD(Number, 100) END SUBROUTINE Conversion
A YYYYMMDD (e.g., 19971027) please (0 to stop) -> 19971026 Year = 1997 Month = 10 Day = 26 A YYYYMMDD (e.g., 19971027) please (0 to stop) -> 20160131 Year = 2016 Month = 1 Day = 31 A YYYYMMDD (e.g., 19971027) please (0 to stop) -> 19010103 Year = 1901 Month = 1 Day = 3 A YYYYMMDD (e.g., 19971027) please (0 to stop) -> 0