Программа, реализующуя на языке ФОРТРАН вычисление заданного набора геометрических характеристик треугольников с использованием меню

Страницы работы

Содержание работы

МИНИСТЕРСТВО ОБРАЗОВАНИЯ РФ

НГТУ

КАФЕДРА ПРИКЛАДНОЙ МАТЕМАТИКИ

ЛАБОРАТОРНАЯ РАБОТА № 1

ПО ДИСЦИПЛИНЕ:

ПРОГРАММИРОВАННИЕ ВЫЧИСЛЕНИЙ

ФПМИ

ГРУППА: ПМ-21

СТУДЕНТЫ:   Воронов А.С.

Кобец Е. В.

ПРЕПОДАВАТЕЛЬ:

НОВОСИБИРСК 2004 г.

1.  Условие задачи

Написать программу, реализующую на языке ФОРТРАН вычисление заданного набора геометрических характеристик треугольников с использованием меню.

Использовать вариант треугольника при котором даны три стороны

2.  Анализ задачи

Дано: Три стороны.

Результат: Площадь треугольника, минимальный угол в треугольнике, косинус  минимального угла.

Метод решения: При вычислении площади треугольника воспользуемся формулой Герона. При вычислении угла воспользуемся формулой арккосинуса от косинуса минимального угла. При вычислении косинуса угла воспользуемся теоремой косинуса с учетом того, что наименьший угол лежит напротив наименьшей стороны.

Каждое действие реализуем в виде подпрограммы.

Vvod – подпрограмма ввода данных. Происходит проверка на верность данных (сумма 2-х сторон больше третьей и длины сторон не отрицательны) и обнуление всех прежних результатов. При проверке суммы длин двух сторон учитывается некоторая погрешность.

Максимально возможный порядок сторон: 1019

Минимально возможный порядок сторон: 10-22

Plosh – подпрограмма расчета площади. Происходит расчет площади по формуле Герона при условии, что данные уже введены или, что площадь еще ни разу не считалась. Использование формулы Герона наиболее выгодно, так как она позволяет вычислить площадь через уже известные три стороны.

Minim – подпрограмма расчета минимального угла через его косинус. Происходит проверка на введенные данные, проверка вычислялся ли уже этот угол, затем проверяется, вычислялся ли косинус до этого, если нет, то запускается функция вычисления косинуса.

Точность числа =3,1414926.

Minim_cos – подпрограмма расчета косинуса минимального угла. Происходит проверка на введенные данные и проверяется, происходило ли вычисление косинуса до этого, затем находится минимальная сторона, и вычисление косинуса противолежащего ей угла по теореме косинусов.

3.  Текст программы


program main

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

pi=3.1415926

ep=0

a=0

s=0

angle=0

cos_angle=0

6     print *,'-MENU-'

print *,'1-Enter'

print *,'2-Vichislit S'

print *,'3-Vichislit min'

print *,'4-Vichislit cos min'

print *,'5-Vihod'

print *,'Viberete'

read *,i

goto (1,2,3,4,5) i

goto 6

1             call vvod

goto 6

2             call plosh

goto 6

3             call minim

goto 6

4             call minim_cos

goto 6

5             end program main

subroutine vvod

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

print *,'Vvedite dlini 3-h storon'

print *,'a:'

read *,a

print *,'b:'

read *,b

print *,'c:'

read *,c

cos_angle=0

s=0

angle=0

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

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

a=0

else

c               a+b-c <= ep || b+c-a <= ep || a+c-b <= ep

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

a=0

end if

end if 

end subroutine vvod

subroutine plosh

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

real p

if (a .eq. 0) then

print *,'Neverno vvedeni dannie'

return

end if

if (s .eq. 0) then

p=(a+b+c)/2

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

end if

print *,'S= ',s

end subroutine plosh

subroutine minim

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

if (a .eq. 0) then

print *,'Neverno vvedeni dannie'

return

end if

if (angle .eq. 0) then

if (cos_angle .eq. 0) then

call minim_cos

end if

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

end if

print *,'Min = ',angle

end subroutine minim

subroutine minim_cos

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

if (a .eq. 0) then

print *,'Neverno vvedeni dannie'

return

end if

if (cos_angle .eq. 0) then

if (a .lt. b) then

if (a .lt. c) then

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

else

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

end if

else

if (b .lt. c) then

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

else

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

end if

end if

end if

print *,'Cos = ',cos_angle

end subroutine minim_cos

Информация о работе