Вычисление набора геометрических характеристик треугольника (Лабораторная работа № 1), страница 2

c--------------------------------------------------------------

                       vvod storon

c--------------------------------------------------------------

        subroutine vvod

        common /var/a,b,s,angle,cos_angle,pi,i,p     

        print *,'Vvedite dlini  storon'

        print *,'a:'

        read *,a

        print *,'b:'

        read *,b

        findc=sqrt((a**2)+(b**2))

        cos_angle=0

        s=0

        angle=0

c----------------------------------------------------------------       

            a<=0   ||    b<=0    || c<=0

c----------------------------------------------------------------           

        if (a .le. 0 .or. b .le. 0 .or. c .le. 0) then

        a=0

        else

c-----------------------------------------------------------------       

              a+b <= c || b+c <= a || a+c <= b

c-------------------------------------------------------------------             

        if (a+b .le. c .or. b+c .le. a .or. a+c .le. b) then

        a=0

        end if

        end if 

        end

c--------------------------------------------------------------

                   vuchislenie ploshadi

c--------------------------------------------------------------       

        subroutine plosh

        common /var/a,b,c,s,angle,cos_angle,pi,i,p     

        real p

        if (a .le. 0) then

        print *,'Neverno vvedeni dannie'

        return

        end if

        if (s .le. 0) then

        p=(a+b+c)/2

        s=(p*(p-a)*(p-b)*(p-c))**0.5

        end if

        print *,'S= ',s

        end

c----------------------------------------------------------------

               vuchislenie minimalnogo ygla

c----------------------------------------------------------------       

        subroutine minim

        common /var/a,b,c,s,angle,cos_angle,pi,i,p     

        if (a .le. 0) then

        print *,'Neverno vvedeni dannie'

        return

        end if

        if (angle .le. 0) then

        if (cos_angle .le. 0) then

        call minim_cos

        end if

        angle= (acos (cos_angle))*180./pi

        end if

        print *,'Min = ',angle

        end

c------------------------------------------------------------------

             vuchislenie cos minimalnogo ygla

c------------------------------------------------------------------

        subroutine minim_cos

        common /var/a,b,c,s,angle,cos_angle,pi,i,p     

        if (a .le. 0) then

        print *,'Neverno vvedeni dannie'

        return

        end if

        if (a.le.b).and.(a.le.c)then

        cos_angle=((a**2)-((b**2)+(c**2)))/(-2.0)*b*c)

        else

        if(b.le.a).and.(b.le.c)then

        cos_angle=((b**2)-((a**2)+(c**2)))/((-2.0)*a*c)

        else

        if (c.le.a).and.(c.le.b))then

        cos_angle=((c**2)-((a**2)+(b**2)))/((-2.0)*a*b)

        end if

        end if

        end if

        print *,'Cos = ',cos_angle

        return

        end

4.Систематестов

Стороны

Площадь

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

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

0

0

0

Проверка не корректна

Проверка не корректна

Проверка не корректна

20

20

20

173.2050781

60

0.5

-30

20

20

Неверно введены данные

Проверка не корректна

Проверка не корректна

50

10

30

Неверно введены данные

Проверка не корректна

Проверка не корректна

3

4

5

6

37

0.8

5. Иследование

1)Для обнаружения ситуации переполнение мы вычисляем площадь равностороннего треугольника. Переполнение возникло при длине стороны, а =10.

Программа выдала сообщение “Infinity”.

a

S

1019

4,3301266E+37

1020

Infinity

При уменьшении длины стороны треугольника до 10 возникла другая особая ситуация. При длине стороны 10 площадь стала равной нулю.

a

S

10-22

4.2038954E-45

10-23

0

погрешность

результата решения задачи от неточности исходных данных

Сторона 1

Сторона 2

Сторона 3

p

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

3

4

5

3.1415926535

3

4

5

3.141592653

3

4

5

3.14159265

3

4

5

3.1415926

3

4

5

3.141592

3

4

5

3.14159

Исследование 2: Поиск исчезновения порядка

Сторона 1

Сторона2

Площадь

108

108

1.4142135623730951D+008

108

107

1.0049875621120890D+008

108

106

1.0000499987500624D+008

108

105

1.0000004999998749D+008

108

104

1.0000000050000000D+008

108

103

1.0000000000499999D+008

108

102

1.0000000000004999D+008

108

101

1.0000000000000050D+008

108

10-1

1.0000000000000000D+008

1015

1015

1015

106

1.0000000000000000D+015