02.07.2013 Views

HP Fortran Programmer's Reference

HP Fortran Programmer's Reference

HP Fortran Programmer's Reference

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

Program units and procedures<br />

Procedure interface<br />

TYPE raw_data<br />

REAL :: x(100) ! values to be averaged<br />

INTEGER :: n ! number of values assigned to x<br />

END TYPE raw_data<br />

! output data<br />

TYPE stats_data<br />

REAL :: sum, max, min, avg ! statistical results<br />

END TYPE stats_data<br />

! interface block to extend the assignment operator<br />

INTERFACE ASSIGNMENT (=)<br />

MODULE PROCEDURE do_stats<br />

END INTERFACE<br />

CONTAINS<br />

SUBROUTINE do_stats(lside, rside)<br />

! define the operations that are performed when<br />

! rside is assigned (=) to lside<br />

156<br />

TYPE (raw_data), INTENT (IN) :: rside<br />

TYPE (stats_data), INTENT (OUT) :: lside<br />

! use a structure constructor for initialization<br />

lside = stats_data(0, 0, 9999999.9, 0)<br />

! find the sum, max, and min<br />

DO i = 1, rside%n<br />

lside%sum = lside%sum + rside%x(i)<br />

IF (lside%max < rside%x(i)) lside%max = rside%x(i)<br />

IF (lside%min > rside%x(i)) lside%min = rside%x(i)<br />

END DO<br />

lside%avg = lside%sum / rside%n ! the average<br />

END SUBROUTINE do_stats<br />

END MODULE def_assign_stats<br />

PROGRAM main<br />

! Make the defined assignment and the definitions of the<br />

! derived-type operands in the assignment accessible to<br />

! this program unit<br />

USE def_assign_stats<br />

TYPE (raw_data) :: user_data ! right-hand side of<br />

! assignment<br />

TYPE (stats_data) :: user_stats ! left-hand side of assignment<br />

CALL get_data(user_data) ! collect user data<br />

user_stats = user_data ! defined assignment statement<br />

PRINT *, 'Maximum =', user_stats%max<br />

Chapter 7

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!