c Main part
program main
implicit none
common / input / a, b, alpha
common / utility / PI, beta
common / flags / is_triangle_created
real a, b, alpha
real PI, beta
logical is_triangle_created
PI = 3.1415927
call Menu
end
c Menu
subroutine Menu
implicit none
integer command
common / input / a, b, alpha
common / utility / PI, beta
common / flags / 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.
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 / flags / 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