You are on page 1of 4

Fortran - Examples 2 Solutions

2 Simple
1. PROGRAM date_type
IMPLICIT NONE
TYPE date
INTEGER :: day
INTEGER :: month
INTEGER :: year
END TYPE date
TYPE (date) :: birthday

birthday = date(2,12,2000)
PRINT *, birthday
PRINT *, birthday%day, birthday%month, birthday%year

END PROGRAM date_type

2. PROGRAM person
IMPLICIT NONE
TYPE name
CHARACTER (LEN=20) :: first
CHARACTER (LEN=20) :: middle
CHARACTER (LEN=20) :: last
END TYPE name
TYPE (name) :: myname

PRINT *, ’First name?’


READ (*,*) myname%first
PRINT *, ’Middle name?’
READ (*,*) myname%middle
PRINT *, ’Surname?’
READ (*,*) myname%last

PRINT *, myname
PRINT *, myname%first, myname%middle, myname%last

! Trim is used here to ensure trailing spaces are not printed,


! but we do need to manually insert one.
IF ( myname%middle==’.’) THEN

1
PRINT *, TRIM(myname%first), ’ ’, TRIM(myname%last)
ELSE
PRINT *, TRIM(myname%first), ’ ’, TRIM(myname%middle), ’ ’, &
TRIM(myname%last)
END IF
END PROGRAM person

4 Difficult
PROGRAM person_type
IMPLICIT NONE
TYPE date
INTEGER :: day
INTEGER :: month
INTEGER :: year
END TYPE date
TYPE name
CHARACTER (LEN=20) :: first
CHARACTER (LEN=20) :: middle
CHARACTER (LEN=20) :: last
END TYPE name

! Combined datatype - should be done this way rather


! than combining the whole thing into one type.
TYPE person
TYPE (date) :: birthday
TYPE (name) :: human
END TYPE person
INTEGER :: age
TYPE (person) :: friend
TYPE (date) :: today = date(4,10,2005)

CHARACTER(LEN=3)::print_month

DO
PRINT *, ’First name?’
READ (*,*) friend%human%first
IF (friend%human%first == ’nobody’) EXIT
PRINT *, ’Middle name?’
READ (*,*) friend%human%middle
PRINT *, ’Surname?’
READ (*,*) friend%human%last
! This should show that we can read them in in this way.
PRINT *, ’DOB? Please enter 3 numbers on the one line’
READ (*,*) friend%birthday

2
IF (today%month > friend%birthday%month) THEN
age = today%year - friend%birthday%year
ELSE IF (today%month < friend%birthday%month) THEN
age = today%year - friend%birthday%year - 1
ELSE
IF (today%day >= friend%birthday%day) THEN
age = today%year - friend%birthday%year
ELSE
age = today%year - friend%birthday%year - 1
END IF
END IF

IF ( friend%human%middle==’.’) THEN
PRINT *, TRIM(friend%human%first), ’ ’, TRIM(friend%human%last)
ELSE
PRINT *, TRIM(friend%human%first), ’ ’, TRIM(friend%human%middle), &
’ ’, TRIM(friend%human%last)
END IF

SELECT CASE (friend%birthday%month)


CASE(1)
print_month=’JAN’
CASE(2)
print_month=’FEB’
CASE(3)
print_month=’MAR’
CASE(4)
print_month=’APR’
CASE(5)
print_month=’MAY’
CASE(6)
print_month=’JUN’
CASE(7)
print_month=’JUL’
CASE(8)
print_month=’AUG’
CASE(9)
print_month=’SEP’
CASE(10)
print_month=’OCT’
CASE(11)
print_month=’NOV’
CASE(12)
print_month=’DEC’

3
CASE DEFAULT
print_month=’???’
END SELECT

PRINT *, ’was born on’, friend%birthday%day, &


print_month,friend%birthday%year, &
’this makes them’, age, ’years old’

END DO

END PROGRAM person_type

You might also like