Форум программистов, компьютерный форум, киберфорум
Fortran
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/15: Рейтинг темы: голосов - 15, средняя оценка - 4.60
0 / 0 / 0
Регистрация: 24.10.2010
Сообщений: 31
1

Существует ли треугольник по введённым длинам сторон (нужно проверить и дополнить)

24.10.2010, 13:46. Показов 2743. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Помогите пожалуйста. Нужно написать программу, по которой можно узнать по введённым длинам сторон, существует такой треугольник или нет, а если существует, то какой он: равносторонний, равнобедренный, прямо-,остро-, тупоугольный.
Так вот, я написал, но при вводе длин 0,3; 0,4; 0,5 программа выдаёт, что треугольник остроугольный, хотя должен выдавать, что прямоугольный. Судя по всему, это происходит из-за погрешности преобразований чисел в двоичный код и обратно. Если посмотреть просто на умножение этих чисел, представляя числа, как double precision, получается, что, как я полагаю при возведении в квадрат числа, квадрат которого равен меньше 0,1 , он выдаёт такую бяку. В итоге для квадрата числа 0,3 получается что-то вроде 0,090000642. Из-за этого и происходит ошибка. Подскажите пожалуйста, как избавиться от этого?

Вот текст мой программы:
Fortran
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
       program TRI
       real  a, b, c
       print*, 'Введите три стороны'
       read*,a,b,c
       s=a
       d=b
       do 10 i=1, 2
        if(s .lt. d) s=d
        d=c
 10    continue
       print*,'Наибольшая сторона:',s
       if(s .eq. a)then
          if(s .lt. b+c) then
           if(b**2+c**2 .gt. a**2) print*, 'Остроугольный'
           if(b**2+c**2 .lt. a**2) print*, 'Тупоугольный'
           if(b**2+c**2 .eq. a**2) print*, 'Прямоугольный'
            goto 20
           endif
 
       elseif(s .eq. b) then
          if(s .lt. a+c) then
           if(a**2+c**2 .gt. b**2) print*, 'Остроугольный'
           if(a**2+c**2 .lt. b**2) print*, 'Тупоугольный'
           if(a**2+c**2 .eq. b**2) print*, 'Прямоугольный'
            goto 20
           endif
 
       elseif(s .eq. c) then
          if(s .lt. a+b) then
           if(a**2+b**2 .gt. c**2) print*, 'Остроугольный'
           if(a**2+b**2 .lt. c**2) print*, 'Тупоугольный'
           if(a**2+b**2 .eq. c**2) print*, 'Прямоугольный'
            goto 20
           endif
       endif
         goto 40
 
 20    if(a .eq. b .and. a .eq. c) then
         print*, 'Равносторонний'
         goto 30
       endif
 
       if(a .eq. b .and. a .ne. c .or. a .eq. c .and. a .ne. b) goto 25
       if(b .eq. c .and. b .ne. a) then
        goto 25
        else
         goto 30
       endif
 
 25   print*, 'Равнобедренный'
 
 30    print*, 'Треугольник существует'
        goto 100
 40    print*, 'Треугольник не существует'
        goto 100
 
 
 100    end
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.10.2010, 13:46
Ответы с готовыми решениями:

Составить программу, которая бы по введенным длинам трех сторон треугольника определяла, является ли данный треугольник прямоугольным
помогите пожалуйста сделать лабу по java,я просто только ее начала изучать.очень нужно,заранее...

Составить программу, которая бы по введенным длинам трех сторон треугольника определяла, является ли данный треугольник прямоугольным
Помогите пожалуйста новичку написать на jave программку: Входной файл: input.txt Выходной файл:...

а) Выяснить, существует ли треугольник с длинами сторон x, y, z. б) Если треугольник существует, то ответить – является
Даны действительные положительные числа x, y, z. а) Выяснить, существует ли треугольник с длинами...

Построить треугольник по длинам сторон
Добрый день . Уже приличное количество часов ломаю голову над задачей "Построить треугольник по 3-м...

1
2 / 2 / 0
Регистрация: 13.10.2010
Сообщений: 7
30.10.2010, 16:07 2
Затрудняюсь сказать, в чем именно проблема - подобные фокусы фортран иногда выкидывает.
В качестве решения предлагаю увеличить разрядность используемых переменных в два раза и на всякий случай объявить еще две используемые переменные s и d:
Fortran
1
      real*8  a, b, c, d ,s
0
30.10.2010, 16:07
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.10.2010, 16:07
Помогаю со студенческими работами здесь

Можно ли из них построить треугольник по данным длинам сторон
дано: длины трех отрезков а,в,с задача спрашивает можно ли из них построить треугольник. pascal

Определить, можно ли построить треугольник по заданным длинам сторон
Составить программу, которая определяет, можно ли построить треугольник по заданным длинам сторон...

По заданным длинам сторон треугольника определить, является ли треугольник остроугольным
По заданным длинам сторон треугольника определить, яв-ляется ли треугольник остроугольным,...

Определить существует ли треугольник с такими длинами сторон и, если существует, будет ли он прямоугольным
помогите проверить правильно ли составил программу. т.к на семерке проверить возможности нет ( ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru