Министерство образования и науки Российской Федерации
Новосибирский государственный технический университет
Кафедра ПМт
Лабораторная работа №1
По программированию вычислений
Факультет: ПМИ
Группа: ПМ – 64
Студенты: Захаров Р. А.
Фельдман М. Л.
Преподаватель: Рояк М. Э.
Вариант: 9
Новосибирск
2008
1. Постановка задачи
Ознакомление с основными операторами языка ФОРТРАН, отслеживание возможностей переполнения и исчезновения порядка при вычислениях, знакомство с погрешностью вычислений.
2. Метод решения
Угол из градусной меры в радианную переводится по формуле:
Угол из радианной меры в градусную переводится по формуле:
Неизвестный угол находится из двух известных сторон и угла по теореме синусов:
Площадь треугольника рассчитывается по формуле:
3. Текст программы
subroutine invalid ()
print*,'Error of entered data.It must be a number'
end
subroutine make_tri ()
common/global/loga,a,b,angle_a,s,angle_b,angle_c,pi
pi=3.1415926535897932384626433832795
1 loga=0
print*,'Enter lenth of two sides and an angle'
read *,a,b,angle_a
if ((a.gt.0).and.(b.gt.0)) then
if ((angle_a.gt.0).and.(angle_a.lt.180)) then
if(((angle_a.ge.90).and.(a.gt.b)).or.(angle_a.lt.90)) then
angle_a=angle_a/180.0*pi
if(a.ge.(b*sin(angle_a))) loga=1
end if
end if
end if
if (loga.eq.1) then
print*,'information entered success'
else
print*,'Error in entered information'
end if
return
3 call invalid()
goto 1
end
subroutine calc_tri ()
common/global/loga,a,b,angle_a,s,angle_b,angle_c,pi
if (loga.eq.1) then
s=(a*b*sin(angle_a+asin(b*sin(angle_a)/a)))/2.0
print*,'s=',s
else
s=0
print*,'Unable to calculate'
end if
end
subroutine min_angle (rmin)
common/global/loga,a,b,angle_a,s,angle_b,angle_c,pi
if (loga.eq.1) then
angle_b=asin((b*sin(angle_a))/a)
angle_c=pi-angle_a-angle_b
rmin=min(angle_a,min(angle_b,angle_c))
print*,'min angle',rmin/pi*180.0
else
angle_a=0
angle_b=0
angle_c=0
rmin=0
print*,'Unable to calculate'
end if
end
subroutine min_cos (rmin,rmcos)
common/global/loga,a,b,angle_a,s,angle_b,angle_c,pi
if (loga.eq.1) then
if (rmin.ne.0) then
rmcos=cos(rmin)
else
angle_b=(b*sin(angle_a))/a
angle_c=pi-angle_a-angle_b
rmin=min(angle_a,angle_b,angle_c)
rmcos=cos(rmin)
end if
print*,'min cos=',rmcos
else
angle_a=0
angle_b=0
angle_c=0
rmin=0
print*,'Unable to calculate'
end if
end
program treugol
common/global/loga,a,b,angle_a,s,angle_b,angle_c,pi
1 i=0
print*,'1.if you want to make new triangle press 1'
print*,'2.calculate area of triangle press 2'
print*,'3.calculate min angle of triangle press 3'
print*,'4.calculate cos of min angle of triangle press 4'
print*,'5.exit press any key'
read*,l
if (l.eq.1) then
call make_tri()
i=1
else
if (l.eq.2) then
call calc_tri()
i=1
else
if (l.eq.3) then
call min_angle (rmin)
i=1
else
if (l.eq.4) then
call min_cos (rmin,rmcos)
i=1
end if
end if
end if
end if
if (i)2,2,1
3 call invalid()
goto 1
2 continue
end
4. Тесты
a |
b |
a |
Результат работы программы |
Примечание |
10 |
100 |
100 |
Error in entered information |
Рис.1 |
2 |
2 |
45 |
S=2.0 |
Рис.2 |
1 |
10 |
10 |
Error in entered information |
Рис.3 |
1 |
1 |
180 |
Error in entered information |
Угол в треугольнике не может быть = 1800 |
1 |
1 |
90 |
Error in entered information |
Рис.4 |
0 |
8 |
45 |
Error in entered information |
Введена сторона длиной = 0 |
5 |
4 |
90 |
S=5.99999 |
Рис.5 |
|
|
5. Исследование №1
Длина стороны a , при которой возникла особая ситуация=1019. Данная ситуация отображается на экране словом inf.
Длина стороны a , при которой возникла вторая особая ситуация=10-24. Данная ситуация отображается на экране числом 0.0000000
Исследование №2
При зафиксированной сторонеa=108 нестандартная ситуация возникла при значении угла = 10-3 : значение косинуса минимального угла стало = 1.00, но cos 0.010= 0,999999984
При зафиксированной стороне a=109 нестандартная ситуация возникла при значении угла = 10-3 : значение косинуса минимального угла стало = 1.00, но cos 0.010= 0,999999984
6. Вывод
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.