Загрузка данных
Составь граф-схему, рассчитай ее мощность, составь максимально полную таблицу тест-кейсов по моему коду С#
using System;
using System.Globalization;
class TriangleAnalyzer
{
static void Main()
{
Console.WriteLine("АНАЛИЗ ТРЕУГОЛЬНИКА ПО ТРЁМ СТОРОНАМ\n");
double a = ReadPositiveDouble("Введите сторону a: ");
double b = ReadPositiveDouble("Введите сторону b: ");
double c = ReadPositiveDouble("Введите сторону c: ");
if (!IsValidTriangle(a, b, c, out string errorMessage))
{
Console.WriteLine($"\n{errorMessage}");
return;
}
string angleType = GetTriangleAngleType(a, b, c);
double area = CalculateArea(a, b, c);
Console.WriteLine($"\nРезультат:");
Console.WriteLine($"Тип треугольника: {angleType}");
Console.WriteLine($"Площадь: {area:F6}");
}
static double ReadPositiveDouble(string prompt)
{
while (true)
{
Console.Write(prompt);
string input = Console.ReadLine();
if (string.IsNullOrWhiteSpace(input))
{
Console.WriteLine("Ошибка: ввод не может быть пустым. Попробуйте снова.");
continue;
}
if (!double.TryParse(input, NumberStyles.Float, CultureInfo.InvariantCulture, out double value))
{
Console.WriteLine("Ошибка: введите число (целое или дробное, разделитель - точка). Попробуйте снова.");
continue;
}
if (value <= 0)
{
Console.WriteLine("Ошибка: сторона треугольника должна быть строго положительным числом (> 0). Попробуйте снова.");
continue;
}
if (value > 1e15)
{
Console.WriteLine("Предупреждение: очень большое значение может привести к потере точности. Продолжаем...");
}
return value;
}
}
static bool IsValidTriangle(double a, double b, double c, out string error)
{
error = "";
if (a <= 0 || b <= 0 || c <= 0)
{
error = "Ошибка: все стороны должны быть положительными числами.";
return false;
}
const double epsilon = 1e-10;
if (Math.Abs(a + b - c) < epsilon ||
Math.Abs(a + c - b) < epsilon ||
Math.Abs(b + c - a) < epsilon)
{
error = "Граничный случай: вырожденный треугольник (сумма двух сторон равна третьей). Площадь = 0, невозможно построить невырожденный треугольник.";
return false;
}
if (a + b < c || a + c < b || b + c < a)
{
error = "Ошибка: введённые числа не могут образовать треугольник (нарушено неравенство треугольника: сумма двух сторон меньше третьей).";
return false;
}
return true;
}
static string GetTriangleAngleType(double a, double b, double c)
{
double a2 = a * a;
double b2 = b * b;
double c2 = c * c;
double maxSide = Math.Max(a, Math.Max(b, c));
double sumSquaresOfSmaller;
if (Math.Abs(maxSide - a) < 1e-10)
sumSquaresOfSmaller = b2 + c2;
else if (Math.Abs(maxSide - b) < 1e-10)
sumSquaresOfSmaller = a2 + c2;
else
sumSquaresOfSmaller = a2 + b2;
double maxSquare = maxSide * maxSide;
if (Math.Abs(sumSquaresOfSmaller - maxSquare) < 1e-10)
return "прямоугольный";
else if (sumSquaresOfSmaller > maxSquare)
return "остроугольный";
else
return "тупоугольный";
}
static double CalculateArea(double a, double b, double c)
{
double p = (a + b + c) / 2.0;
double area = Math.Sqrt(p * (p - a) * (p - b) * (p - c));
return area;
}
}