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

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

10 страниц (Word-файл)

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

Министерство образования и науки РФ

Новосибирский Государственный Технический Университет

Кафедра ПМт

Лабораторная работа №1

По программированию вычислений

Факультет: ПМИ

Группа: ПМ-71

Студенты: Бузмакова О.,Зубакова М.

Вариант  8

Новосибирск

2009

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

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

1.  Ввод нового треугольника.

2.  Вычисление площади треугольника.

3.  Вычисление минимального угла в градусах.

4.  Вычисление косинуса минимального угла.

5.  Окончание работы.

Треугольник задается двумя сторонами и углом между первой стороной и оставшейся.

Математическая модель

Дано:

a – первая сторона, b – вторая сторона, α – угол между a и оставшейся стороной(в градусах)

                                                        a                                 b

                                                        α                                       β

По  теореме  синусов  имеем :

Таким образом треугольник существует  тогда и только тогда, когда

                                                          ,

Осуществляется проверка параметров треугольника на корректность (значения сторон положительны и лежат в диапозоне [10-22 ,1019], α Î (0,180), возможность существования треугольника, также учитывается случай когда a≥b и α≥90,).

Возможны два случая:

1)  а ≤ b : тогда треугольник определяется однозначно.

                                                                a                            b

                                                               α                                         β

2)  а > b : тогда треугольник определяется НЕ однозначно.

2.1)  имеет два решения β1 и β2, где β1 +  β2  = 180 0.

                          

                                 b                          b                   a      

                                                                                        α

2.2) есть частное решение, когда β = 900, тогда треугольник определяется однозначно.

Нахождение площади треугольника:

     

Нахождение минимального угла:

                                    ,

Используя эту формулу можно найти угол между b и оставшейся. Последний угол(γ ) находится исходя из знания суммы углов в треугольнике.

       β=arcsin(a*sinα/b)

      γ=pi-β-α

если треугольник определяется не однозначно , то

       β2=pi-β(см.п.2,1)

       γ1=pi-α-β2

Нахождение косинуса минимального угла: Cos (min{α,β,γ}) . В случае не однозначного определения треугольника считаются косинусы обоих минимальных углов.

При решении данной задачи работа осуществлялась с радианной мерой углов.

Формула перевода градусов в радианы:  p=k⁰*π/180⁰ .

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

program main

       common /vvodimie/a,b,ugol

       common /pii/pi

       common/ugly/ugol1,ugol2,ugol3,ugol4,ugol5

       call menu()

      end

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!   

      subroutine menu()

      common /vvodimie/a,b,ugol

      common/ugly/ugol1,ugol2,ugol3,ugol4,ugol5

      common /pii/pi

6     print *, '1)vvod parametrov'

      print *, '2)ploshad'

      print *, '3)min ugol'

      print *, '4)Cos'

      print *, '5)Exit'

      read *, I

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

1     call vvod()

      call proverka1(n,k)

      if (n.eq.0.or.k.eq.0) then

      print*, 'necorrectnie dannie'

      pause

      goto 6

      endif

      call proverka2(j)

      if (j.eq.0) goto 6

      call ugly_()

      goto 6

2     if(b.ge.a)then

         call square1(ugol3,w)

         print*,'ploshad=',w

         pause

      else

         if(a*sin(ugol1).eq.b)then

         z=a*b/2

         print*,'treygolnik pryamoygolnii'

         print*,'ploshad=',z

         pause

         endif

      call square1(ugol3,d)

      call square1(ugol5,e)

      print*,'treugolnik opredelen NE odnoznachno'

      print*,'ploshad 1=',d

      print*,'ploshad 2=',e

      pause

      endif    

      goto 6

3     if(b.ge.a)then

       call min_ugol(ugol1,ugol2,ugol3,f)

       f=f*180/pi

       print*,'min ugol=',f

       pause

      else

       call min_ugol(ugol1,ugol4,ugol5,g)

       call min_ugol(ugol1,ugol2,ugol3,h)

       g=g*180.0/pi

       h=h*180.0/pi

       print*,'treugolnik opredelen NE odnoznachno'

       print*,'min_ugol 1=',g

       print*,'min_ugol 2=',h

       pause

      endif

      goto 6

4     if(b.ge.a)then

        call cos_min_ugol(ugol1,ugol2,ugol3,pp)

        print*,'cos min ugla=',pp

        pause

      else

        call cos_min_ugol(ugol1,ugol2,ugol3,p1)

        call cos_min_ugol(ugol1,ugol4,ugol5,p2) 

        print*,'treugolnik opredelen NE odnoznachno'

        print*,'cos min_ugol 1=',p1

        print*,'cos min_ugol 2=',p2

        pause

      endif

      goto 6

5     end 

!!vvod dannix!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

      subroutine vvod()

      common /vvodimie/a,b,ugol

      common /pii/pi

      common/ugly/ugol1,ugol2,ugol3,ugol4,ugol5

      print*, 'vvedite dannie'

      read*,a,b,ugol

      pi=3.14159265

      ugol1=ugol*pi/180.0

      end  

!!ostalnye ugly!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Похожие материалы

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