Определить возможность существования треугольника по сторонам
Вводятся длины трех сторон предполагаемого треугольника. Определить, может ли существовать треугольник с такими сторонами при условии что, треугольник существует только тогда, когда ни одна его сторона не превышает сумму двух других.
Примеры выполнения программы
Длины сторон: 5 7 3
Треугольник существует.
Длины сторон: 10 5 3
Треугольник не существует.
Требуется сравнить длину каждого отрезка-стороны с суммой двух других. Если хотя бы в одном случае отрезок окажется больше суммы двух других, то треугольника с такими сторонами не существует.
Ниже приведены решения задачи на языке программирования Паскаль двумя способами. В первом случае все стороны проверяются в одном операторе if
; во втором случае каждая сторона проверяется отдельно, а программа содержит вложенные операторы if-else
.
Программа 1:
var
a, b, c: integer;
begin
write('Длины сторон: ');
readln(a, b, c);
if (a < b+c) and (b < a+c) and (c < a+b) then
writeln('Треугольник существует.')
else
writeln('Треугольник не существует.');
end.
В языке Паскаль логический оператор and
имеет приоритет над операторам >
, <
. Поэтому для изменения последовательности выполнения действий в заголовке условного оператора используются скобки.
В условии if
проверяется, что каждая из сторон меньше суммы других. Если хотя бы одна будет больше, то все логическое выражение вернет ложь (false
). В таком случае сработает ветка else
.
Программа 2:
В программе ниже существование треугольника проверяется поэтапно.
- Если первое условие возвращает ложь, то поток выполнения программы переходит к ветке
else
, которая соответствует внешнемуif
(находится в самом конце). - Если первое условие соблюдено, то поток выполнения программы оказывается у вложенного
if
. Здесь проверяется уже второе условие. - Если оно возвращает ложь, то программа переходит к предпоследнему
else
. - Если и второе логическое выражение возвращает истину (
true
), то программа идет к третьему условию. При его соблюдении выполняется тело самого вложенного оператораif
. При его несоблюдении сработает самое вложенноеelse
.
Данный способ решения задачи позволяет определить, какая именно сторона превысила или равна сумме двух других.
var
a, b, c: integer;
begin
write('A: '); readln(a);
write('B: '); readln(b);
write('C: '); readln(c);
if a < b + c then
if b < a + c then
if c < a + b then
writeln ('Треугольник существует.')
else
writeln ('Треугольника нет. Сторона C слишком большая.')
else
writeln ('Треугольника нет. Сторона B слишком большая.')
else
writeln ('Треугольника нет. Сторона A слишком большая.');
end.
Примеры выполнения программы:
A: 4
B: 5
C: 6
Треугольник существует.
A: 10
B: 5
C: 4
Треугольника нет. Сторона A слишком большая.
A: 3
B: 3
C: 7
Треугольника нет. Сторона C слишком большая.
A: 6
B: 12
C: 4
Треугольника нет. Сторона B слишком большая.
Примечание. В обоих вариантах решения задачи мы не учитываем случай вырожденного треугольника, когда сторона может быть равна сумме двух других. Чтобы учитывать такие треугольники оператор сравнения "меньше" надо поменять на "меньше или равно" (<=
).