c Main. Create by Sanya, Nikita and Vanya
program main
implicit none
real side, angle1, angle2, angle3, pi
common / input / side, angle1, angle2
common / garbage / angle3, pi
pi = 3.141592652
call console()
stop
end
c Console handling
subroutine console()
implicit none
integer command
logical is_interrupted, is_created, triangle_setup
real area, min_angle, min_angle_cos
real side, angle1, angle2, angle3, pi
common / input / side, angle1, angle2
common / garbage / angle3, pi
is_interrupted = .FALSE.
is_created = .FALSE.
10 if (is_interrupted .EQV. .FALSE.) then
print *, 'Write command: '
read *, command
if (command .EQ. 1) then
print *,
+ 'Input triangle parameters [side, angle1, angle2]: '
read *, side, angle1, angle2
if (triangle_setup()) then
is_created = .TRUE.
print *, 'Triangle successfully created'
else
is_created = .FALSE.
print *, 'Error input'
endif
elseif (command .EQ. 5) then
print *, 'Exit'
is_interrupted = .TRUE.
elseif (is_created) then
if (command .EQ. 2) then
print *, 'Area: ', area()
elseif (command .EQ. 3) then
print *, 'Minimal angle: ', min_angle()
elseif (command .EQ. 4) then
print *, 'Minimal angle cosinus: ', min_angle_cos()
else
print *, 'Error input'
endif
else
print *, 'Error input'
endif
goto 10
endif
return
end
c Triangle setup
logical function triangle_setup()
implicit none
real side, angle1, angle2, angle3, pi
common / input / side, angle1, angle2
common / garbage / angle3, pi
real temp
temp = angle1 + angle2
triangle_setup = .FALSE.
if (temp .LT. 180 .AND. angle1 .GT. 0 .AND.
+ angle2 .GT. 0 .AND. side .GT. 0) then
angle3 = real(180) - temp
triangle_setup = .TRUE.
endif
return
end
c Compute area
real function area()
implicit none
real side, angle1, angle2, angle3, pi
common / input / side, angle1, angle2
common / garbage / angle3, pi
area = 0.5 * (sin(angle1 * pi / 180)
+ * sin(angle3 * pi / 180) / sin(angle2 * pi / 180)) * (side**2)
return
end
c Compute minimal angle
real function min_angle()
implicit none
real side, angle1, angle2, angle3, pi
common / input / side, angle1, angle2
common / garbage / angle3, pi
if (angle1 .LE. angle2 .AND. angle1 .LE. angle3) then
min_angle = angle1
elseif (angle2 .LE. angle1 .AND. angle2 .LE. angle3) then
min_angle = angle2
else
min_angle = angle3
endif
return
end
c Compute minimal angle's cos
real function min_angle_cos()
implicit none
real side, angle1, angle2, angle3, pi, min_angle
common / input / side, angle1, angle2
common / garbage / angle3, pi
min_angle_cos = cos(min_angle() * pi / 180)
return
end