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

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

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

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

Кафедра ПМ

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

по дисциплине

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

вариант №6

Преподаватель: Токарева М.Г.

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

Группа: ПМ-62

Студентка: Коротенко Д.Ю.

Новосибирск 2008г.

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

Данные для исследований:

1 исследование                                                       2 исследование

II. Используемые формулы

Если 3 точки лежат на одной прямой, то S=0

ш.bmpS=                     =|(y1-y3)*(x1-x2)+(x1-x3)*(y2-y1)|/2 формула для вычисления

площади треугольника

Наименьший угол лежит напротив наименьшей стороны, т.о. для поиска наименьшего угла сравниваем длины сторон a, b и d

|a|=sqrt((x1-x3)**2+(y1-y3)**2) – длина стороны а

Если b и d образуют наименьший угол а, то его косинус вычисляется через скалярное произведение векторов b и d:

cosa=((x1-x2)*(x3-x2)+(y1-y2)*(y3-y2))/(||b||*||d||)

Угол а вычисляется по своему косинусу:

a=acos(cosa)

III. Структура программы

subroutineproverka (i) // процедура проверки исходных данных на корректность с учетом переполнения и нарушений порядка

входные данные и результаты: пременная i целого типа является результатом проверки коректности данных ( принимает значения 0,1,2 и 3 – означают причину некорректности данных)

subroutinevvod (j) // процедура ввода исходных данных

входные данные и результаты: пременная j целого типа  отвечает за корректность данных и наличие хотя бы 1 вызова подпрограммы ( принимает значения 1 и 2)

subroutinesquare () // процедура вычисления площади треугольника

subroutineugol(x1,y1,x2,y2,x3,y3,c,d)// вспомогательная процедура вычисления косинуса угла

входные данные и результаты: вещественные переменные x1, x2, x3, y1, y2, y3 являются координатами вершин треугольника и передаются в порядке, в котором образуют угол; вещественные переменныеc,d– это нормы сторон, образующих угол

subroutinecos// основная процедура вычисления косинуса угла:сравнением длин сторон треугольника

subroutineminugol// процедура вычисления наименьшего угла

Взаимодействие подпрограмм

program main


subroutine vvod (j)                                                             subroutine minugol


subroutine proverka (i)

                                                                                         subroutine cos  

subroutine square ()                subroutine ugol(x1,y1,x2,y2,x3,y3,c,d)

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

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

c   процедура вычисления площади треугольника

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

      subroutine square ()

      common /tre/x1,x2,x3,y1,y2,y3

      common /rez/s,a,cosa

      s=(y1-y3)*(x1-x2)+(x1-x3)*(y2-y1)

      s=abs(s)/2

      end

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

c   процедура проверки исходных данных на корректность

c   (можно ли построить по 3 заданным точкам треугольник с учетом 

с   нарушений порядка и  переполнения)

c   флаг i показывает результат

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

subroutine proverka (i)

      common /tre/x1,x2,x3,y1,y2,y3

      common /rez/s,a,cosa

      call square()                                                     !Если площадь равна 0, то либо данный некорректны,

      if (s.gt.0)then                                                   !либо переполнение в низком порядке

      b=(abs(y1-y3)*1E-20)*(abs(x1-x2)*1E-20)        !Масштабирование слагаемых в формуле площади

      c=(abs(x1-x3)*1E-20)*(abs(y1-y2)*1E-20)

      if((b.lt.5E-2).and.(c.lt.5E-2))then                        !проверка на переполнение в высоком порядке

      call cos                                                             !проверка на слишком маленький угол, если стороны

      if ((cosa.lt.1).and.(cosa.gt.0))then                      !отличаются более, чем на 3 порядка

      i=1

      else

      i=3

      end if

      else

      i=2

      end if

      else

      i=0

      end if     

      end

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

c   процедура ввода исходных данных,инициализирует переменные косинуса, угла и площади,

c   вызывает процедуру проверки исходных данных на корректность. Идентификатор j отвечает

c   за корректность данных и наличие хотя бы 1 вызова подпрограммы

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

      subroutine vvod (j)

      common /tre/x1,x2,x3,y1,y2,y3

      common /rez/s,a,cosa

      print *,'enter the koordinates in the following order:x1 y1-x3 y3'

      read *, x1,y1,x2,y2,x3,y3

      call proverka(i)

      print *, x1,y1,x2,y2,x3,y3

      if(i.eq.1) then

      a=0

      j=2

       else

       j=1

       if(i.eq.2) then

       print *,'The data are too extensive'

       else

       if(i.eq.3)then

       print *,'The corner  is too small'

       else

      print *,'The data uncorrected or too small'

      end if

      end if

      end if

      end

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

c   вспомогательная процедура вычисления косинуса угла через скалярное произведение

c   входные параметры:координаты вершин, заданные в порядке, образующем угол, и

c   нормы векторов, образующих угол

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

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