Определение вида треугольника по координатам его вершин - Visual Basic .NET
Формулировка задачи:
Координаты вершин треугольника вводятся с клавиатуры.
Определить существует ли треугольник, а если существует то какой?
Почему не всегда выводит значение s2, а только иногда? Исправьте, пожалуйста ошибку.
А прямоугольный не выводит скорее всего потому, что машинные вычисления не достаточно точные и величины не приравниваются.
Листинг программы
- Imports System.Console
- Module Module1
- Sub Main()
- WriteLine("Введите координаты вершин x1,y1,x2,y2,x3,y3 в столбик")
- Dim x1 As Double = CDbl(ReadLine()),
- y1 As Double = CDbl(ReadLine()),
- x2 As Double = CDbl(ReadLine()),
- y2 As Double = CDbl(ReadLine()),
- x3 As Double = CDbl(ReadLine()),
- y3 As Double = CDbl(ReadLine()),
- a As Double = Math.Sqrt(Math.Pow((x1 - x2), 2) + Math.Pow((y1 - y2), 2)),
- b As Double = Math.Sqrt(Math.Pow((x2 - x3), 2) + Math.Pow((y2 - y3), 2)),
- c As Double = Math.Sqrt(Math.Pow((x3 - x1), 2) + Math.Pow((y3 - y1), 2)),
- s1 As String,
- s2 As String,
- s3 As String,
- s4 As String,
- max As Double,
- srednee As Double,
- min As Double
- If (a >= b) And (a >= c) Then
- max = a
- If (b >= c) Then
- srednee = b
- min = c
- Else
- srednee = c
- min = b
- End If
- End If
- If (b >= c) And (b >= a) Then
- max = b
- If (a >= c) Then
- srednee = a
- min = c
- Else
- srednee = c
- min = a
- End If
- End If
- If (c >= a) And (c >= b) Then
- c = max
- If (b >= a) Then
- srednee = b
- min = a
- Else
- srednee = a
- min = b
- End If
- End If
- If (max < min + srednee) Then
- s1 = "Треугольник существует"
- If Math.Pow(max, 2) = Math.Pow(srednee, 2) + Math.Pow(min, 2) Then
- s2 = "Прямоугольный"
- End If
- If (max = srednee) And (srednee = min) Then
- s3 = "Равносторонний"
- End If
- If (max = srednee) And (max > min) Then
- s4 = "Равнобедренный"
- End If
- If (max > srednee) And (srednee > min) Then
- s2 = "Общий вариант"
- End If
- s2 += s3 + s4
- Else
- s1 = "Треугольник не существует"
- s2 = " "
- s3 = " "
- s4 = " "
- End If
- WriteLine(s1)
- WriteLine(s2)
- WriteLine("max={0:f2}, srednee={1:f2}, min={2:f2}", max, srednee, min)
- ReadKey()
- End Sub
- End Module
Надо изменить последние две проверки
Листинг программы
- If ((max = srednee) And (max > min)) Or ((srednee = min) And (max > srednee)) Then
- s4 = "Равнобедренный"
- End If
- If (max > srednee) And (srednee > min) And (Math.Pow(max, 2) <> Math.Pow(srednee, 2) + Math.Pow(min, 2)) Then
- s2 = "Общий вариант"
- End If
Решение задачи: «Определение вида треугольника по координатам его вершин»
textual
Листинг программы
- '…
- MsgBox(getTypeTriangle(2, 2, 3.7))
- '…
- Private Function getTypeTriangle(ByVal a As Double, ByVal b As Double, ByVal c As Double) As String
- Dim ss As String = String.Empty
- Dim dd As Double = Double.Epsilon
- If (a + b > c) And (b + c > a) And (a + c > b) Then
- 'треугольник существует
- Dim hh() As Double = {a ^ 2, b ^ 2, c ^ 2}
- Array.Sort(hh) 'hh(2) - максимальное значение
- Dim h12 As Double = hh(1) + hh(0)
- If hh(2) >= h12 - dd And hh(2) <= h12 + dd Then Return "треугольник прямоугольный"
- If hh(2) < h12 Then
- ss = "треугольник остроугольный"
- If hh(2) - hh(1) < dd And hh(2) - hh(0) < dd And hh(1) - hh(0) < dd Then
- ss &= " (равносторонний)"
- ElseIf hh(2) - hh(1) < dd Or hh(2) - hh(0) < dd Or hh(1) - hh(0) < dd Then
- ss &= " (равнобедренный)"
- End If
- Else
- ss = "треугольник тупоугольный"
- If hh(2) - hh(1) < dd Or hh(2) - hh(0) < dd Or hh(1) - hh(0) < dd Then
- ss &= " (равнобедренный)"
- End If
- End If
- Else
- ss = "треугольник не существует"
- End If
- Return ss
- End Function
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д