Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 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
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement