Определение вида треугольника по координатам его вершин - Visual Basic .NET

Узнай цену своей работы

Формулировка задачи:

Координаты вершин треугольника вводятся с клавиатуры. Определить существует ли треугольник, а если существует то какой?
Листинг программы
  1. Imports System.Console
  2. Module Module1
  3. Sub Main()
  4. WriteLine("Введите координаты вершин x1,y1,x2,y2,x3,y3 в столбик")
  5. Dim x1 As Double = CDbl(ReadLine()),
  6. y1 As Double = CDbl(ReadLine()),
  7. x2 As Double = CDbl(ReadLine()),
  8. y2 As Double = CDbl(ReadLine()),
  9. x3 As Double = CDbl(ReadLine()),
  10. y3 As Double = CDbl(ReadLine()),
  11. a As Double = Math.Sqrt(Math.Pow((x1 - x2), 2) + Math.Pow((y1 - y2), 2)),
  12. b As Double = Math.Sqrt(Math.Pow((x2 - x3), 2) + Math.Pow((y2 - y3), 2)),
  13. c As Double = Math.Sqrt(Math.Pow((x3 - x1), 2) + Math.Pow((y3 - y1), 2)),
  14. s1 As String,
  15. s2 As String,
  16. s3 As String,
  17. s4 As String,
  18. max As Double,
  19. srednee As Double,
  20. min As Double
  21. If (a >= b) And (a >= c) Then
  22. max = a
  23. If (b >= c) Then
  24. srednee = b
  25. min = c
  26. Else
  27. srednee = c
  28. min = b
  29. End If
  30. End If
  31. If (b >= c) And (b >= a) Then
  32. max = b
  33. If (a >= c) Then
  34. srednee = a
  35. min = c
  36. Else
  37. srednee = c
  38. min = a
  39. End If
  40. End If
  41. If (c >= a) And (c >= b) Then
  42. c = max
  43. If (b >= a) Then
  44. srednee = b
  45. min = a
  46. Else
  47. srednee = a
  48. min = b
  49. End If
  50. End If
  51. If (max < min + srednee) Then
  52. s1 = "Треугольник существует"
  53. If Math.Pow(max, 2) = Math.Pow(srednee, 2) + Math.Pow(min, 2) Then
  54. s2 = "Прямоугольный"
  55. End If
  56. If (max = srednee) And (srednee = min) Then
  57. s3 = "Равносторонний"
  58. End If
  59. If (max = srednee) And (max > min) Then
  60. s4 = "Равнобедренный"
  61. End If
  62. If (max > srednee) And (srednee > min) Then
  63. s2 = "Общий вариант"
  64. End If
  65. s2 += s3 + s4
  66. Else
  67. s1 = "Треугольник не существует"
  68. s2 = " "
  69. s3 = " "
  70. s4 = " "
  71. End If
  72. WriteLine(s1)
  73. WriteLine(s2)
  74. WriteLine("max={0:f2}, srednee={1:f2}, min={2:f2}", max, srednee, min)
  75. ReadKey()
  76. End Sub
  77. End Module
Почему не всегда выводит значение s2, а только иногда? Исправьте, пожалуйста ошибку.
Надо изменить последние две проверки
Листинг программы
  1. If ((max = srednee) And (max > min)) Or ((srednee = min) And (max > srednee)) Then
  2. s4 = "Равнобедренный"
  3. End If
  4. If (max > srednee) And (srednee > min) And (Math.Pow(max, 2) <> Math.Pow(srednee, 2) + Math.Pow(min, 2)) Then
  5. s2 = "Общий вариант"
  6. End If
А прямоугольный не выводит скорее всего потому, что машинные вычисления не достаточно точные и величины не приравниваются.

Решение задачи: «Определение вида треугольника по координатам его вершин»

textual
Листинг программы
  1. '…
  2.  MsgBox(getTypeTriangle(2, 2, 3.7))
  3. '
  4. Private Function getTypeTriangle(ByVal a As Double, ByVal b As Double, ByVal c As Double) As String
  5.     Dim ss As String = String.Empty
  6.     Dim dd As Double = Double.Epsilon
  7.     If (a + b > c) And (b + c > a) And (a + c > b) Then
  8.         'треугольник существует
  9.         Dim hh() As Double = {a ^ 2, b ^ 2, c ^ 2}
  10.         Array.Sort(hh) 'hh(2) - максимальное значение
  11.         Dim h12 As Double = hh(1) + hh(0)
  12.         If hh(2) >= h12 - dd And hh(2) <= h12 + dd Then Return "треугольник прямоугольный"
  13.         If hh(2) < h12 Then
  14.             ss = "треугольник остроугольный"
  15.             If hh(2) - hh(1) < dd And hh(2) - hh(0) < dd And hh(1) - hh(0) < dd Then
  16.                 ss &= " (равносторонний)"
  17.             ElseIf hh(2) - hh(1) < dd Or hh(2) - hh(0) < dd Or hh(1) - hh(0) < dd Then
  18.                 ss &= " (равнобедренный)"
  19.             End If
  20.         Else
  21.             ss = "треугольник тупоугольный"
  22.             If hh(2) - hh(1) < dd Or hh(2) - hh(0) < dd Or hh(1) - hh(0) < dd Then
  23.                 ss &= " (равнобедренный)"
  24.             End If
  25.         End If
  26.     Else
  27.         ss = "треугольник не существует"
  28.     End If
  29.     Return ss
  30. End Function

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы