Написание программы на языке ФОРТРАН, реализующей вычисление заданного набора геометрических характеристик треугольников с использованием меню (Лабораторная работа № 1), страница 2

        c = sqrt(dx32*dx32 + dy32*dy32)

        END

c       /*******************Вычисление площади******************/

        SUBROUTINE Strka()

        Common /sides/ a,b,c, /Str/ S

        call Calcsides()!Длины сторон

        S = (sqrt((a+b+c)*(b+c-a)*(a+c-b)*(a+b-c)))/4    

        END

c       /**************Вычисление минимального угла*************/

SUBROUTINE  minugol()

        Common  /sides/ a,b,c,/Str/ S

        common /vych/ cos_u,ugol

        real Pi

        call Calcsides()

        Pi=3.1415926535          

c       /******* min storony******/   

        IF(a.LE.b.and.a.LE.c)THEN

                 ugol=(acos (  (b*b+c*c-a*a)/(2*b*c)  )/Pi)*180 !По теореме Cos

        elseIF(b.LE.c.and.b.LE.a)THEN

                 ugol=(acos (  (a*a+c*c-b*b)/(2*a*c)  )/Pi)*180     

        else

                 ugol=(acos (  (a*a+b*b-c*c)/(2*a*b)  )/Pi)*180  

        endIF  

        !ugol=(acos (cos_u)/Pi)*180

        END  

c       /*******************Вычисление Cos********************/

        SUBROUTINE  mincos()

        Common  /sides/ a,b,c

        common  /Str/ S

        common  /vych/ cos_u,ugol

        call Calcsides()            

c       /*******Poisk min storony******/   

        IF(a.LE.b.and.a.LE.c)THEN

                cos_u=(b*b+c*c-a*a)/(2*b*c)

        elseIF(b.LE.c.and.b.LE.a)THEN

                cos_u=(a*a+c*c-b*b)/(2*a*c)    

        else

                cos_u=(a*a+b*b-c*c)/(2*a*b)  

        endIF  

        END

c       /*************************ПРОВЕРКИ***********************/

c       /************ТОЧКИ НЕ ЛЕЖАТ НА ОДНОЙ ПРЯМОЙ***************/

integer*1 function prjamaja()

        common /Coord/ x1,y1,x2,y2,x3,y3

         prjamaja = 1

        IF(x1.EQ.x2.and.x2.EQ.x3)THEN

           prjamaja = 0

           return

        endIF

        IF(y1.EQ.y2.and.y2.EQ.y3)THEN

           prjamaja = 0

           return

        endIF

        end

c       /*************ТОЧКИ НЕ СОВПАДАЮТ*************/

        integer*1 function tochka()

        common /Coord/ x1,y1,x2,y2,x3,y3

        tochka=1

        IF(x1.EQ.x2.and.y1.EQ.y2)THEN

          tochka=0

          return

        endIF     

        IF(x2.EQ.x3.and.y2.EQ.y3)THEN

          tochka=0

          return

        endIF      

        IF(x1.EQ.x3.and.y1.EQ.y3)THEN

          tochka=0

          return

        endIF     

        end

c       /*************ДИАПАЗОН ЗНАЧЕНИЙ*************/

        integer*1 function diapazon()

        common /sides/ a,b,c

        diapazon=0       

        IF(a.GT.(1e-23).AND.b.GT.(1e-23).AND.c.GT.(1e-23))THEN!минимальные значения

        IF(a.LT.(1e+20).AND.b.LT.(1e+20).AND.c.LT.(1e+20)) diapazon=1!максимальные

        endIF

        END


Тесты

Координаты точек

Результат

Площадь

Минимальный угол

Косинус минимального угла

(1;5)

(1;3)

(1;9)

NE KORREKTNIY VVOD, pryamaya

(0;0)

(4;5)

(4;5)

NE KORREKTNIY VVOD, tochki sovpadayt

(0;0)

(0;5)

(5;0)

12,50

45,00

0,70710678

(1;1)

(134;2)

(100;8)

416,00

3,61

0,9980116

(-3,9)

(4;-2)

  (-15;10)

62,52

25,25

0,9044316

(0;0)

(0,2;0,1)

(0;2)

0,20

6,00

0,9945055

(0,0009;0,0007)

(0,0001;0,0001)

(0,0009;0,0001)

2.3999999E-007

36,86

0,8000000

Исследование №1

Данное исследование позволяет отследить, при каких входных данных возникает ситуация переполнения. Была проведена серия тестов, в которой для равностороннего треугольника вычислялась площадь.

Стороны

Результат

Площадь

Минимальный угол

Косинус минимального угла

10

50

45

0,70710678

102

5000

105

5.0000000E+009

108

5.0000001E+015

1011

4.9999999E+021

1015

4.9999997E+029

1017

4.9999999E+033

1019

4.9999998E+037

1020

inf