 
Given a triangle with side lengths a, b and c, its area can be computed using the Heron's formula:
 
where s is the half of the perimeter length:
 
In order for a, b and c to form a triangle, two conditions must be satisfied. First, all side lengths must be positive:
 
Second, the sum of any two side lengths must be greater than the third side length:
 
Write a program to read in three real values and use an internal subroutine
to compute the triangle area.  This subroutine should tell the main
program if the area computation is successful.
 
! --------------------------------------------------------------------
! PROGRAM  HeronFormula:
!    This program contains one subroutine that takes three REAL values
! and computes the area of the triangle bounded by the input values.
! --------------------------------------------------------------------
PROGRAM  HeronFormula
   IMPLICIT  NONE
   REAL    :: Side1, Side2, Side3       ! input values
   REAL    :: Answer                    ! will hold the area
   LOGICAL :: ErrorStatus               ! return status
   READ(*,*)  Side1, Side2, Side3
   CALL  TriangleArea(Side1, Side2, Side3, Answer, ErrorStatus)
   IF (ErrorStatus) THEN                ! if error occurs in subroutine
      WRITE(*,*)  "ERROR: not a triangle"    ! display a message
   ELSE                                 ! otherwise, display the area
      WRITE(*,*)  "The triangle area is ", Answer
   END IF
CONTAINS
! --------------------------------------------------------------------
! SUBROUTINE  TriangleArea():
!    This subroutine takes three REAL values as the sides of a
! triangle.  Then, it tests to see if these values do form a triangle.
! If they do, the area of the triangle is computed and returned with
! formal argument Area and .FALSE. is returned with Error.  Otherwise,
! the area is set to 0.0 and .TRUE. is returned with Error.
! --------------------------------------------------------------------
   SUBROUTINE  TriangleArea(a, b, c, Area, Error)
      IMPLICIT  NONE
      REAL, INTENT(IN)     :: a, b, c   ! input sides
      REAL, INTENT(OUT)    :: Area      ! computed area
      LOGICAL, INTENT(OUT) :: Error     ! error indicator
      REAL                 :: s
      LOGICAL              :: Test1, Test2
      Test1 = (a > 0) .AND. (b > 0) .AND. (c > 0)
      Test2 = (a+b > c) .AND. (a+c > b) .AND. (b+c > a)
      IF (Test1 .AND. Test2) THEN       ! a triangle?
         Error = .FALSE.                ! yes.  no error
         s     = (a + b + c)/2.0        ! compute area
         Area  = SQRT(s*(s-a)*(s-b)*(s-c))
      ELSE
         Error = .TRUE.                 ! not a triangle
         Area  = 0.0                    ! set area to zero
      END IF
   END SUBROUTINE  TriangleArea
END PROGRAM  HeronFormula
Click here to download this program.
 
The triangle area is 6.49519062
