Умная программа Герона
С помощью операторов ветвления сделаем умную программу для вычисления площади треугольника по формуле Герона.
В функцию Geron передаются три числа – стороны треугольника. Но не всякие три отрезка образуют треугольник. Нужно, чтобы выполнялось правило треугольника: сумма любых двух сторон должна быть больше или равна третьей. Если это правило не выполняется, например, a=3 b=4 c=10 , подкоренное выражение становится отрицательным, и при вычислении корня программа выдает сообщение об ошибке:
Во время исполнения ошибка '5':
Неверный вызов процедуры или аргумент
[ Продолжение ] [ Конец ] [ Отладка ] [ Помощь ]
Нажатие на кнопку Debug выделяет желтым цветом строку, в которой произошла ошибка. Для снятия желтого цвета и продолжения работы с программой нужно выполнить команду Run/Reset.
Добавим в функцию Geron проверку подкоренного выражения
Function Geron(a As Double, b As Double, c As Double) _
As Double
'Вычисление площади треугольника по формуле Герона
Dim p As Double
Dim s As Double
p = (a + b + c) * 0.5
s = p * (p - a) * (p - b) * (p - c)
If s >= 0 Then
Geron = Sqr(s)
Else
Geron = -1
End If
End Function
Теперь в случае нарушения правила треугольника функция будет возвращать значение –1.
Для вызова функции Geron используется макрос Geron3, который также нуждается в усовершенствовании. При вводе длины каждой стороны через окно функции InputBox добавим поверку на пустую строку, на числовое значение в строке, а введенного числа – на положительное значение. В случае ошибки – повторение ввода числа без дополнительных сообщений. Задание читателю: добавить диагностические сообщения. Пример сообщений возьмите из макроса Discount.
После вычисления площади треугольника добавим анализ возвращенного значения. Если функции Geron возвратила –1, нарушено правило треугольника. В окне функции MsgBox выдается диагностическое сообщение, и пользователя возвращают на ввод сторон треугольника.
Sub Geron3()
Dim a As Double 'стороны треугольника
Dim b As Double
Dim c As Double
Dim s As Double 'площадь треугольника
Dim z As String
Dim str As String
str = "Ввод длин сторон треугольника" 'заголовок окна
za: z = InputBox("Введите сторону a", str, "3")
If z = "" Then GoTo za
If Not (IsNumeric(z)) Then GoTo za
a = CDbl(z) 'строку с числом преобразуем в число типа Double
If a <= 0 Then GoTo za
zb: z = InputBox("Введите сторону b", str, "4")
If z = "" Then GoTo zb
If Not (IsNumeric(z)) Then GoTo zb
b = CDbl(z)
If b <= 0 Then GoTo zb
zc: z = InputBox("Введите сторону c", str, "5")
If z = "" Then GoTo zc
If Not (IsNumeric(z)) Then GoTo zc
c = CDbl(z)
If c <= 0 Then GoTo zc
s = Geron(a, b, c) 'вычисляем площадь треугольника
str = "Для треугольника со сторонами" & vbNewLine _
& "a=" & a & " b=" & b & " c=" & c & vbNewLine
If s < 0 Then
str = str & "нарушено правило треугольника"
MsgBox str, vbOKOnly, "Повторите ввод"
GoTo za
End If
s = Round(s, 3) 'округляем до 3 цифр после запятой
str = str & "площадь треугольника = " & s
MsgBox str, vbOKOnly, "Формула Герона"
End Sub
