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 |
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.