Введите три числа. Если они могут быть длинами сторон равнобедренного остроугольного. Ребят,подскажите пожалуйста как проверить могут ли быть стороны длинами равнобедренного остроугольного треуг. Не могу понять ,как проверить именно на остроугольный треугольник ,в геометрии 0. Помогите пожалуйста
В программе необходимо последовательно выполнить несколько проверок.
1. Можно ли вообще построить треугольник с заданными сторонами?
Можно, если сумма двух любых сторон больше третьей.
2. Равнобедренный ли треугольник?
Равнобедренный, если из трех заданных сторон две имеют равную длину.
3. Остроугольный ли треугольник?
Треугольник остроугольный, если угол, заключенный между равными сторонами — острый. В самом деле, сумма углов в треугольнике равна 180 градусам, поэтому в равнобедренном треугольнике углы между основанием треугольника и прилегающими к нему равными сторонами всегда острые (если бы они были хотя бы прямыми, сумма только этих двух углов уже бы составила 180 градусов). Следовательно, достаточно чтобы угол при вершине равнобедренного треугольника был острым.
Для удобства обозначим боковые стороны a и b, а основание c. Тогда по теореме косинусов имеем:
Если угол острый, его косинус должен быть положительным, поэтому
Это и есть условие, определяющее остроугольный равнобедренный треугольник.
Ниже приведен текст программы на языке Pascal.ABC, решающей поставленную задачу.
var
a, b, c, t: real;
begin
Write(‘Введите через пробел стороны треугольника: ‘);
Readln(a, b, c);
if (a + b < c) or (a + c < b) or (b + c < a) then
Writeln(‘Треугольник построить нельзя’)
else begin
if a = c then begin t := b; b := c; c := t end
else if b = c then begin t := a; a := c; c := t end;
if a <> b then Writeln(‘Треугольник не равнобедренный’)
else
if c * c < 2 * a * a then Writeln('Треугольник остроугольный')
else Writeln(‘Треугольник не остроугольный’)
end
end.
Тестовое решение:
Введите через пробел стороны треугольника: 4 6 6
Треугольник остроугольный
Определить существование треугольника по трем сторонам
У треугольника сумма любых двух сторон должна быть больше третьей. Иначе две стороны просто «лягут» на третью и треугольника не получится.
Пользователь вводит длины трех сторон. Программа должна определять, может ли существовать треугольник при таких длинах. Это значит, необходимо сравнить суммы всех пар сторон с оставшейся третьей стороной. Чтобы треугольник существовал, сумма всегда должна быть больше отдельной стороны или, по крайней мере, не меньше, если учитывать так называемый вырожденный треугольник.
Поскольку всего три стороны, то можно составить три варианта сложения двух сторон: 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
Какие числа могут быть сторонами остроугольного треугольника
Регистрация: 28.04.2014
Сообщений: 3
borland C++. Даны числа: a b c. Определить, могут ли они быть сторонами треугольника, и если да, то определить его тип
заданы три числа:a b c. Определить, могут ли они быть сторонами треугольника, и если да, то определить его тип: равносторонний, равнобедренный, разностороний
# include # include # include void main () < clrscr() float a,b,c; printf("Enter a "); scanf("%f",&a); printf("Enter b "); scanf("%f",&b); printf("Enter c "); scanf("%f",&c); if((aelse printf ("Ne syshestvyet"); getch(); >
Последний раз редактировалось Stilet; 28.04.2014 в 21:23 .
Задача «Треугольник»
Заданы длины трех отрезков a, b, c. Необходимо определить, можно ли из них составить треугольник. В случае утвердительного ответа определить его тип: остроугольный, прямоугольный или тупоугольный.
Вход. Три целых числа a, b, c – длины трех отрезков.
Выход. Строка, содержащая информацию о треугольнике: “ACUTE”, если он остроугольный, “RIGHT” если прямоугольный и “OBTUSE” если тупоугольный. Если из трех отрезков составить треугольник нельзя, то вывести “NONE”.
Пример входа
Пример выхода
Решение. Геометрия.
Анализ алгоритма
Из трех отрезков a, b, c можно составить треугольник, если выполняется неравенство треугольника: сумма длин двух любых сторон треугольника строго больше длины третьей.
Из теоремы Пифагора следует, что треугольник со сторонами a, b, c является прямоугольным, если выполняется одно из следующих равенств:
a 2 = b 2 + c 2 или b 2 = a 2 + c 2 или c 2 = a 2 + b 2
Треугольник будет остроугольным, если квадрат каждой стороны строго меньше суммы квадратов двух других сторон. То есть одновременно выполняется три неравенства:
Треугольник является тупоугольным, если существует такая сторона, квадрат которой строго больше суммы квадратов двух других сторон. То есть выполняется одно из трех неравенств:
a 2 > b 2 + c 2 или b 2 > a 2 + c 2 или c 2 > a 2 + b 2
Условие тупоугольности можно не проверять: если треугольник не является ни остроугольным, ни прямоугольным, то он является тупоугольным. Для вывода результата воспользуемся типом string .
if ((a >= b + c) or (b >= a + c) or (c >= a + b))
then res := ‘NONE’ else
if ((a*a = b*b + c*c) or (b*b = a*a + c*c) or (c*c = a*a + b*b))
then res := ‘RIGHT’ else
then res := ‘ACUTE’ else
Задача решена, но имеет один недостаток. При проверке типа треугольника приходится каждый раз проверять три условия: в каждом из условных операторов if стоит три выражения. Можно сделать так, что в каждом условном операторе будет стоять лишь одно условие. Подумайте, как это сделать?
Ответ на вопрос дает сортировка. Отсортируем по возрастанию длины исходных отрезков. Пусть у нас далее имеют место неравенства: a £ b £ c. Тогда для проверки неравенства треугольника достаточно проверить лишь a + b > c, так как оба других неравенства b + c > a и a + c > b выполняются. Для проверки прямоугольности достаточно проверить только равенство c 2 = a 2 + b 2 , так как при a £ b £ c гипотенузой может быть только сторона c. В случае тупоугольности наибольшей стороной может быть только c, поэтому для существования тупого угла в треугольнике достаточно выполнение условия c 2 > a 2 + b 2 . Треугольник будет остроугольным, если c 2 < a 2 + b 2 .
Например, в языке Си, отсортировать три числа можно так:
Язык Паскаль вообще не имеет функций сортировки. Здесь, уже на элементарной задаче, мы столкнулись с бедностью языка Паскаль. Реализовать сортировку непосредственно операциями сравнения в этой задаче можно, так как число переменных не велико. Если бы их было больше – требовалось бы заводить массив и уже писать один из классических алгоритмов сортировки.
Если мы сможем эффективно отсортировать числа a, b, c, то программа примет вид:
if c >= a + b then res := ‘NONE’ else
if c*c = a*a + b*b then res := ‘RIGHT’ else