Как лучше можно сделать условие на проверку какой это треугольник
Я написал условия на проверку. Какой это треугольник. Можется подсказать как лучше написать это условие чтобы оно выглядело не таким громоздким
if ((side_1 + side_2 <= side_3) || (side_1 + side_3 <= side_2) || (side_2 + side_3 <= side_1))
{
// Это не треугольник!
}
else
if ((side_1 == side_2) && (side_2 == side_3))
{
// Это равносторонний треугольник!
}
else
if (((side_1 == side_2) && (side_2 != side_3)) || ((side_1 == side_3) && (side_2 != side_3)) || ((side_2 == side_3) && (side_1 != side_3)))
{
// Это равнобедренный треугольник!
}
Ответы (2 шт):
Автор решения: aepot
→ Ссылка
Здесь особо никакой магии, супероптимизацию не придумать, но можно причесать код:
- Переменные назвать покороче, в данном конкретном случае, стороны треугольника можно обозвать A, B и C.
- Скобки в условиях можно убрать
if ((a == b) && (b == c))содержит лишние скобки, можно такif (a == b && b == c). - Так как вы уже проверили, равносторонний это треугольник или нет, и перешли к проверке равнобедренного, то одна сторона у вас точно как минимум не равна двум другим, следовательно и проверку лишнюю выполнять не нужно.
Я проверил код на консольном приложении, получилось вот так:
static void Main(string[] args)
{
int a = ReadPositiveNumber("Введите a = ");
int b = ReadPositiveNumber("Введите b = ");
int c = ReadPositiveNumber("Введите c = ");
if (a + b <= c || a + c <= b || b + c <= a)
Console.WriteLine("Это не треугольник!");
else if (a == b && b == c)
Console.WriteLine("Это равносторонний треугольник!");
else if (a == b || a == c || b == c)
Console.WriteLine("Это равнобедренный треугольник!");
else
Console.WriteLine("Это треугольник.");
Console.ReadKey();
}
private static int ReadPositiveNumber(string prompt)
{
while (true)
{
Console.Write(prompt);
if (int.TryParse(Console.ReadLine(), out int number) && number > 0)
return number;
Console.WriteLine("Некорректный ввод, введите натуральное число.");
}
}
Кстати да, на этапе ввода я уже проверяю, что пользователь ввел натуральное число. Если у вас этой проверки нет, то ее нужно добавить.
Автор решения: Qwertiy
→ Ссылка
if (a + b <= c || a + c <= b || b + c <= a)
return "Не треугольник";
if (a == b && b == c)
return "Равносторонний";
if (a == b || b == c || a == c)
return "Равнобедренный";
return "Обычный";
Если хочется минимизировать число сравнений (хотя почти наверняка смысла нет):
if (a == b)
if (b == c)
return "Равносторонний";
else if (a + b <= c)
return "Не треугольник";
else
return "Равнобедренный";
if (a == c)
if (a + c <= b)
return "Не треугольник";
else
return "Равнобедренный";
if (b == c)
if (b + c <= a)
return "Не треугольник";
else
return "Равнобедренный";
return "Обычный";