Загрузка данных


Составь граф-схему, рассчитай ее мощность, составь максимально полную таблицу тест-кейсов по моему коду С#
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;
    }
}