Перейти к содержимому

Как проверить существует ли треугольник

  • автор:

Определить возможность существования треугольника по сторонам

Вводятся длины трех сторон предполагаемого треугольника. Определить, может ли существовать треугольник с такими сторонами при условии что, треугольник существует только тогда, когда ни одна его сторона не превышает сумму двух других.

Примеры выполнения программы

Длины сторон: 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 .

В программе ниже существование треугольника проверяется поэтапно.

  1. Если первое условие возвращает ложь, то поток выполнения программы переходит к ветке else , которая соответствует внешнему if (находится в самом конце).
  2. Если первое условие соблюдено, то поток выполнения программы оказывается у вложенного if . Здесь проверяется уже второе условие.
  3. Если оно возвращает ложь, то программа переходит к предпоследнему else .
  4. Если и второе логическое выражение возвращает истину ( 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 слишком большая.

Примечание. В обоих вариантах решения задачи мы не учитываем случай вырожденного треугольника, когда сторона может быть равна сумме двух других. Чтобы учитывать такие треугольники оператор сравнения "меньше" надо поменять на "меньше или равно" (

Существует ли треугольник

Онлайн калькулятор поможет проверить существование треугольника.
Чтобы треугольник существовал, сумма двух сторон треугольника всегда должна быть больше третей стороны.
a + b > c, b + c > a, a + c > b.

Вам помог этот калькулятор?

Предложения и пожелания пишите на [email protected]

Поделитесь этим калькулятором на форуме или в сети!

Это помогает делать новые калькуляторы.

Существует ли треугольник

Онлайн калькулятор поможет проверить существование треугольника.
Чтобы треугольник существовал, сумма двух сторон треугольника всегда должна быть больше третей стороны.
a + b > c, b + c > a, a + c > b.

Пожалуйста напишите с чем связна такая низкая оценка:

Для установки калькулятора на iPhone - просто добавьте страницу
«На главный экран»

Для установки калькулятора на Android - просто добавьте страницу
«На главный экран»

Проверка что созданный треугольник существует и не является дегенеративным

Здраствуйте, код по проверки дегенеративности есть, но если может кто подсказать если верно сделан или если есть другие варианты, а то вроде код есть а проверку дегенеративность не проходит))).

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.6k 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 )

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *