CCCPaste

1e35d939c0cf5

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