Определить существование треугольника по трем сторонам
У треугольника сумма любых двух сторон должна быть больше третьей. Иначе две стороны просто «лягут» на третью и треугольника не получится.
Пользователь вводит длины трех сторон. Программа должна определять, может ли существовать треугольник при таких длинах. Это значит, необходимо сравнить суммы всех пар сторон с оставшейся третьей стороной. Чтобы треугольник существовал, сумма всегда должна быть больше отдельной стороны или, по крайней мере, не меньше, если учитывать так называемый вырожденный треугольник.
Поскольку всего три стороны, то можно составить три варианта сложения двух сторон: a + b , b + c , a + c . Первую сумму сравниваем с оставшейся стороной c , вторую — с a и третью — с b . Если хотя бы в одном случае сумма окажется не больше третьей стороны, то делается вывод, что треугольник не существует.
print("Стороны:") a = float(input("a = ")) b = float(input("b = ")) c = float(input("c = ")) if a + b > c and a + c > b and b + c > a: print("Треугольник существует") else: print("Треугольник не существует")
Можно решить задачу сложнее. Если требуется также определить, какая из сторон больше суммы двух других, то решение может быть таким:
print("Длины сторон треугольника:") a = float(input("a = ")) b = float(input("b = ")) c = float(input("c = ")) flag = '' if a + b > c: if a + c > b: if b + c > a: print("Треугольник есть") else: flag = 'a' else: flag = 'b' else: flag = 'c' if flag != '': print("Треугольника нет") print("'%s' > суммы других" % flag)
Особого смысла использовать переменную flag здесь нет. Она просто позволяет лишний раз не писать в программе строки, информирующие о том, что треугольник не существует.
Пример выполнения программы:
Длины сторон треугольника: a = 4 b = 5 c = 10 Треугольника нет 'c' > суммы других
Более изящным решением является использование оператора множественного ветвления языка программирования Python: if-elif-else.
print("Длины сторон треугольника:") a = float(input("a = ")) b = float(input("b = ")) c = float(input("c = ")) flag = '' if a + b c: flag = 'c' elif a + c b: flag = 'b' elif b + c a: flag = 'a' else: print("Треугольник есть") if flag != '': print("Треугольника нет") print("'%s' > суммы других" % flag)
Здесь сравнение происходит от обратного: утверждается, что сумма двух сторон меньше или равна третьей. Если это так (утверждение верно), то треугольника не существует. «Слишком длинная сторона» определяется в зависимости от того, в заголовке какой ветки логическое выражение возвращает истину.
X Скрыть Наверх
Решение задач на Python
Определить возможность существования треугольника по сторонам
Вводятся длины трех сторон предполагаемого треугольника. Определить, может ли существовать треугольник с такими сторонами при условии что, треугольник существует только тогда, когда ни одна его сторона не превышает сумму двух других.
Примеры выполнения программы
Длины сторон: 5 7 3 Треугольник существует.
Длины сторон: 10 5 3 Треугольник не существует.
Требуется сравнить длину каждого отрезка-стороны с суммой двух других. Если хотя бы в одном случае отрезок окажется больше суммы двух других, то треугольника с такими сторонами не существует.
Ниже приведены решения задачи на языке программирования Паскаль двумя способами. В первом случае все стороны проверяются в одном операторе if ; во втором случае каждая сторона проверяется отдельно, а программа содержит вложенные операторы if-else .
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.
В условии if проверяется, что каждая из сторон меньше суммы других. Если хотя бы одна будет больше, то все логическое выражение вернет ложь ( false ). В таком случае сработает ветка else .
В программе ниже существование треугольника проверяется поэтапно.
- Если первое условие возвращает ложь, то поток выполнения программы переходит к ветке 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 слишком большая.
Примечание. В обоих вариантах решения задачи мы не учитываем случай вырожденного треугольника, когда сторона может быть равна сумме двух других. Чтобы учитывать такие треугольники оператор сравнения "меньше" надо поменять на "меньше или равно" (
Проверка что созданный треугольник существует и не является дегенеративным
Здраствуйте, код по проверки дегенеративности есть, но если может кто подсказать если верно сделан или если есть другие варианты, а то вроде код есть а проверку дегенеративность не проходит))).
public Triangle(Point a, Point b, Point c) < if ((length1
тут какбы должен пройти проверку но ничего не случается.
double length1(Point a, Point b) < double xDistanceSquare = Math.pow(a.getX() - b.getX(), 2); double yDistanceSquare = Math.pow(a.getY() - b.getY(), 2); return Math.sqrt(xDistanceSquare + yDistanceSquare); >double length2(Point a, Point c) < double xDistanceSquare = Math.pow(a.getX() - c.getX(), 2); double yDistanceSquare = Math.pow(a.getY() - c.getY(), 2); return Math.sqrt(xDistanceSquare + yDistanceSquare); >double length3(Point c, Point b)
Отслеживать
48.7k 17 17 золотых знаков 56 56 серебряных знаков 100 100 бронзовых знаков
задан 20 сен 2021 в 5:10
user461637 user461637
Напишите лучше расчёт площади (оно и само по себе пригодится), и по результату смотрите, дегенерат попался или нет. Раз даны три длины - то по Герону.
20 сен 2021 в 5:47
По-русски такие треугольники называются «вырожденными»
20 сен 2021 в 5:56
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
Раз вам даны точки, то треугольник, конечно, существует, а вырожденность можно проверить, узнав, лежат ли точки на одной прямой
(собственно, через векторное произведение считается удвоенная площадь, как Akina уже отметил, только с координатами Герон не нужен)
public Triangle(Point a, Point b, Point c) < if ((a.getX()-b.getX())*(c.getY()-b.getY())-(a.getY()-b.getY())*(c.getX()-b.getX())==0) throw new IllegalArgumentException("Triangle is degenerative");
Если координаты внутри Point у вас не целые, то сравнивайте абсолютное значение указанного выражения с малой величиной (скажем, 1.0e-10 )
Существует ли треугольник?
Необходимым и достаточным условием существования треугольника является выполнение следующих неравенств:
a+b>c, a+c>b, b+c>a, (a>0, b>0, c>0),
где a, b и с - длины сторон треугольника.
Другими словами, треугольник существует тогда и только тогда, когда сумма любых двух его сторон больше третьей стороны.
Онлайн калькулятор позволяет проверить существование треугольника по заданным сторонам.
Поделиться страницей в социальных сетях:
Онлайн калькуляторы
Calculatorium.net - это бесплатные онлайн калькуляторы для самых разнообразных целей: математические калькуляторы, калькуляторы даты и времени, здоровья, финансов. Инструменты для работы с текстом. Конвертеры. Удобное решение различных задач - в учебе, работе, быту.
Актуальная информация
Помимо онлайн калькуляторов, сайт также предоставляет актуальную информацию по курсам валют и криптовалют, заторах на дорогах, праздниках и значимых событиях, случившихся в этот день. Информация из официальных источников, постоянное обновление.
Навигация
- О проекте
- Обратная связь
- Поиск по сайту
- Группа ВКонтакте