c Main menu
PROGRAM main
IMPLICIT NONE
INTEGER command
COMMON / input / a, b, alpha
COMMON / utility / PI, beta
COMMON / flag / is_triangle_created
REAL calculate_area, find_min_angle, min_angle_cos
REAL a, b, alpha
REAL PI, beta
LOGICAL is_triangle_created
is_triangle_created = .FALSE.
PI = 3.1415927
PRINT *, '1. Create new triangle.'
PRINT *, '2. Calculate area.'
PRINT *, '3. Find minimal angle.'
PRINT *, '4. Find cosin of minimal angle.'
PRINT *, '5. Exit.'
c Delete this
PRINT *, '6. (temp) Show triangle params.'
c Delete this
1 PRINT *, '>> '
READ *, command
IF(.NOT. is_triangle_created .AND.
+ (command .EQ. 2 .OR. command .EQ. 3 .OR. command .EQ. 4)) THEN
PRINT *, 'Error: triangle is not created.'
GOTO 1
ENDIF
SELECT CASE (command)
CASE (1)
CALL input_triangle
CASE (2)
PRINT *, 'Area = ', calculate_area()
CASE (3)
PRINT *, 'Minimal angle = ', find_min_angle()
CASE (4)
PRINT *, 'Minimal angle cosin = ', min_angle_cos()
CASE (5)
GOTO 2
CASE (6)
c Delete this
CALL write_triangle
c Delete this
CASE default
PRINT *, 'Unexpected command'
END SELECT
GOTO 1
2 END
c Triangle creation
SUBROUTINE input_triangle
IMPLICIT NONE
COMMON / input / a, b, alpha
COMMON / utility / PI, beta
COMMON / flag / is_triangle_created
REAL a, b, alpha
REAL PI, beta
LOGICAL is_triangle_created
3 PRINT *, 'Enter [a] [b] [alpha]:'
READ *, a, b, alpha
IF(a .LE. 0 .OR. b .LE. 0 .OR. alpha .LE. 0 .OR.
+ (a**2 .LE. (b*SIN(alpha))**2)) THEN
PRINT *, 'Error: triangle is not exist'
GOTO 3
ENDIF
is_triangle_created = .TRUE.
PRINT *, 'Triangle is created'
END
c Area calculation
REAL FUNCTION calculate_area()
IMPLICIT NONE
COMMON / input / a, b, alpha
COMMON / utility / PI, beta
REAL a, b, alpha
REAL PI, beta
beta = ASIN(b/a * SIN(alpha * PI/180)) * 180/PI
calculate_area = 0.5 * a * b * SIN((180 - beta - alpha) * PI/180)
RETURN
END
c Minimal angle finding
REAL FUNCTION find_min_angle()
IMPLICIT NONE
COMMON / input / a, b, alpha
COMMON / utility / PI, beta
REAL a, b, alpha
REAL PI, beta, gamma
beta = ASIN(b/a * SIN(alpha * PI/180)) * 180/PI
gamma = 180 - alpha - beta
IF (alpha .LE. beta .AND. alpha .LE. gamma) THEN
find_min_angle = alpha
ELSEIF (beta .LE. alpha .AND. beta .LE. gamma) THEN
find_min_angle = beta
ELSE
find_min_angle = gamma
ENDIF
RETURN
END
c Calculate cosin of minimal angle
REAL FUNCTION min_angle_cos()
IMPLICIT NONE
COMMON / input / a, b, alpha
COMMON / utility / PI, beta
REAL a, b, alpha
REAL PI, beta, find_min_angle
min_angle_cos = COS(find_min_angle() * PI/180)
END
c Delete
SUBROUTINE write_triangle
COMMON / input / a, b, alpha
COMMON / utility / PI, beta
REAL a, b, alpha
REAL PI, beta
PRINT *, 'a = ', a
PRINT *, 'b = ', b
PRINT *, 'alpha = ', alpha
END
c Delete