!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