CCCPaste

aed7baa59954d

!23456     
C     PROBLEM LIST:
C     1) ДОБАВИТЬ PI КАК ПАРАМЕТЕР, НО  ПРЕНЕБРЕЧЬ ЯВНЫМ ОБЪЯВЛЕНИЕМ
C     2) ИСПОЛЬЗОВАТЬ ФУНКЦИЮ ВМЕСТО SUBROUTINE ПРИ ВЫЧИСЛЕНИИ
C     НАИМЕНЬШЕГО УГЛА И ВЫЗЫВАТЬ ЕЕ ПРИ ПОИСКЕ НАИМЕНЬШЕГО КОСИНУСА

      PROGRAM MAIN
C      PARAMETER PI = 3.14159265
      COMMON /PUBLIC/ A, B, ALPH
      COMMON /PUBLIC1/ GAMMA, BETA
      CALL MENU
    1 READ *, ICOMMAND
      SELECT CASE (ICOMMAND)
      CASE (1)
       CALL ENTERNEWTRAINGLE
      CASE (2)
       CALL CALCULATEAREA
      CASE (3)
       CALL FINDSMALLESTANG
       PRINT *, MINANGLE(A,B,ALPH)
      CASE (4)
       CALL FINDSMALLESTCOS
      CASE (5)
       GO TO 2
      CASE (6)
       CALL WRILETRAINGLE
      CASE DEFAULT
       PRINT *, 'UNEXPECTED COMMAND'
      END SELECT
      GO TO 1
    2 END
          
      SUBROUTINE MENU
      PRINT *, '1) ENTER TRAINGLE'
      PRINT *, '2) CALCULATING THE AREA OF A TRAINGLE'
      PRINT *, '3) CALCULATION OF THE SMALLEST ANGLE IN DEGREES'
      PRINT *, '4) CALCULATION OF THE COSINE OF THE MINIMUM ANGLE'
      PRINT *, '5) END OF WORK'
      PRINT *, '6!) WRITE TRAINGLE'
      END
      
CCCC  TO DELETE
      SUBROUTINE WRILETRAINGLE
      COMMON /PUBLIC/ A, B, ALPH
      PRINT 5,A,B,ALPH
    5 FORMAT ('NOW TRAINGLE HAS FOLLOWING VALUES: A=', F3.0,
     1 ' B=',F3.0,' ALPH=', F11.8) 
      END
CCCC  TO DELETE
      
      SUBROUTINE ENTERNEWTRAINGLE
      COMMON /PUBLIC/ A, B, ALPH
   14 PRINT *, 'ENTER FOLLOWING DATA:'
      PRINT *, 'A='
      READ *, A
      PRINT *, 'B='
      READ *, B
      PRINT *, 'ALPH=(GRADUES)'
      READ *, ALPH
      ALPH = ALPH/180*3.14159265
      IF(A**2.LE.(B*SIN(ALPH))**(2)) THEN
       PRINT *, 'A TRAINGLE WITH THE GIVEN PARAMETERS DOES NOT EXIST!'
       GO TO 14
      ENDIF
      END
      
      SUBROUTINE CALCULATEAREA
      COMMON /PUBLIC/ A, B, ALPH
      COMMON /PUBLIC1/ GAMMA, BETA
      GAMMA = 3.14159265 - ALPH - ASIN(B*SIN(ALPH)/A)
      PRINT 8,0.5*A*B*SIN(GAMMA)
    8 FORMAT('TRAINGLE HAS AREA: ',F7.4)
      END
      
      SUBROUTINE FINDSMALLESTANG
      COMMON /PUBLIC/ A, B, ALPH
      COMMON /PUBLIC1/ GAMMA, BETA
      BETA = ASIN(B*SIN(ALPH)/A)
      GAMMA = 3.14159265 - ALPH - ASIN(B*SIN(ALPH)/A)
      IF(ALPH.LT.BETA.AND.ALPH.LT.GAMMA) THEN
       PRINT 9, ALPH*180/3.14159256
    9  FORMAT('SMALLEST ANGLE HAS VALUE: ', F7.4)
      ELSE IF(BETA.LT.ALPHA.AND.BETA.LT.GAMMA) THEN
       PRINT 7, BETA*180/3.14159256
    7  FORMAT('SMALLEST ANGLE HAS VALUE: ', F7.4)
      ELSE IF(GAMMA.LT.BETA.AND.GAMMA.LT.BETA) THEN
       PRINT 6, GAMMA*180/3.14159256
    6  FORMAT('SMALLEST ANGLE HAS VALUE: ', F7.4)
      ELSE
       PRINT *, 'UNEXPECTED PROBLEM!'
      END IF
      END

C     TRY TO USE IT
      DOUBLEPRECISION FUNCTION MINANGLE(A,B,ALPH)
      !COMMON /PUBLIC/ A, B, ALPH
      C = B*COS(ALPH)+SQRT(A**2-(B*SIN(ALPH))**2)
      IF(A.LT.B.AND.A.LT.C) THEN
       MINANGLE = ALPH
       RETURN
      ELSE IF(B.LT.A.AND.B.LT.C) THEN
       MINANGLE = ASIN(B*SIN(ALPH)/A)
       RETURN
      ELSE IF(C.LT.A.AND.C.LT.B) THEN
       MINANGLE = ASIN(C*SIN(ALPH)/A)
       RETURN
      ELSE
       MINANGLE = 0
       !PRINT *, 'UNEXPECTED PROBLEM!'
       RETURN
      END IF
      !RETURN
      END
      
      SUBROUTINE FINDSMALLESTCOS
      COMMON /PUBLIC/ A, B, ALPH
      C = B*COS(ALPH)+SQRT(A**2-(B*SIN(ALPH))**2)
      IF(A.LT.B.AND.A.LT.C) THEN
       PRINT 9, COS(ALPH)
    9  FORMAT('SMALLEST COSINE HAS VALUE: ', F7.4)
      ELSE IF(B.LT.A.AND.B.LT.C) THEN
       PRINT 7, COS(ASIN(B*SIN(ALPH)/A))
    7  FORMAT('SMALLEST COSINE HAS VALUE: ', F7.4)
      ELSE IF(C.LT.A.AND.C.LT.B) THEN
       PRINT 6, COS(ASIN(C*SIN(ALPH)/A))
    6  FORMAT('SMALLEST COSINE HAS VALUE: ', F7.4)
      ELSE
       PRINT *, 'UNEXPECTED PROBLEM!'
      END IF
      END