Логика четко вытекает из определения этих различных типов треугольников, которое, как отмечает профессор, является информацией, легко получаемой из Википедии.Это просто включает в себя простое сравнение длин сторон;Вы не должны идти так далеко, как углы.Но я помогу вам с условием «не треугольник».Не бойтесь надеть здесь свою математическую шляпу и пойти побродить, небольшая логика не плохая вещь для студента-полисиста, который терпит время от времени.: -)
Чтобы стороны образовали правильный треугольник, для каждой пары сторон (я назову их f
и g
), они должны составлять больше, чем длина третьей стороны (Я назову это h
).Если вы имеете дело с равносторонними треугольниками, вы автоматически знаете, что это условие выполнено (почему?).Если вы имеете дело с равнобедренными или разносторонними треугольниками, вам технически нужно проверить только две меньшие стороны относительно самой большой стороны, и если это верно для них, то верно и для других двух случаев (почему?).Тем не менее, вам также может быть удобно проверить все три случая.
Рассматривая, почему это неравенство должно выполняться: если сумма двух сторон точно равна длине третьей стороны, вы бы получили«вырожденный» треугольник, в котором стороны f
и g
могут лежать только поверх h
!Если бы они суммировали до меньшего, обе стороны могли бы соединиться с конечными точками h
, но тогда никогда не встретились бы в третьей точке!Вы можете проверить это самостоятельно, обрезав кусочки или полоски бумаги и попробовав их.
Три другие вещи, о которых стоит подумать:
- В C ++,
double
и float
это не одно и то же.Один имеет меньшую точность, чем другой.Убедитесь, что вы используете тот, который требует профессор. - Проверка на то, что стороны неотрицательны, - отличная идея.Вероятно, вы могли бы также разумно исключить длины 0, чтобы исключить возможность вырожденных треугольников, которые просто выглядят как отрезки или точки.
- При сравнении чисел с плавающей запятой всегда следует учитывать, является листрогое равенство даст вам то, что вы хотите.Для проверки равносторонних / равнобедренных / разносторонних условий, вы в порядке, потому что пользователь непосредственно вводит числа с плавающей запятой, а вы ими не манипулируете, поэтому у вас нет шансов внести ошибку.Но при проверке условия «не треугольника» относительно легко создать ситуацию, когда сложение двух сторон округляется (из-за превратностей арифметики с плавающей точкой в процессоре) в нечто, что очень близко, но не совсемточно, третья сторона.В этих случаях, если вы хотите поймать вырожденные треугольники, вы обычно выбираете значение «эпсилон» (некоторое очень небольшое значение по сравнению с числами, с которыми вы имеете дело), которое представляет максимальное количество округления, которое вы готовытерпеть.Затем вы проверяете, находится ли сумма
f
и g
где-то между h - epsilon
и h + epsilon
- или, другими словами, абсолютное значение f + g - h
меньше или равноepsilon
.Если это так, вы заявляете, что f + g = h
(насколько вы можете судить), и имеете дело с вырожденным случаем.