Если три числа могут быть длинами сторон равнобедренного тупоугольного треугольника, вычислить его площадь - C#

Узнай цену своей работы

Формулировка задачи:

Помогите пожалуйста с задачей. Ввести три числа. Если они могут быть длинами сторон равнобедренного тупоугольного треугольника, вычислить его площадь. Вывести длины сторон и площадь в порядке возрастания Вот, что получилось, но там что-то не правильно, программа работает не так и нужно вывести значения в порядке возрастания.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace Triangle
{
    class Program
    {
        static void Main(string[] args)
        {
            /*Ввести три числа. Если они могут быть длинами сторон равнобедренного тупоугольного треугольника, 
             вычислить его площадь. Вывести длины сторон и площадь в порядке возрастания.*/
 
            double a, b, c;
            //a, b, c-стороны треугольника
 
            Console.Write("a= ");
            a = Convert.ToDouble(Console.ReadLine());
 
            Console.Write("b= ");
            b = Convert.ToDouble(Console.ReadLine());
 
            Console.Write("c= ");
            c = Convert.ToDouble(Console.ReadLine());
 
            if ((a + b >= c) || (a + c >= b) || (b + c >= a))
            {
                if (a == b || a == c || b == c)
                {
                    if ((a * a) + (b * b) < (c * c) || (a * a) + (c * c) < (b * b) || (c * c) + (b * b) < (a * a))
                    {
                        double p = (a + b + c) / 2;
                        double s = Math.Sqrt(p - (p - a) * (p - b) * (p - c));
                        Console.WriteLine("Площадь равна {0}", s);
                    }
                    else
                        Console.WriteLine("(Треугольник не удовлетворяет заданному условию)");
                }
                else
                    Console.WriteLine("(Треугольник не удовлетворяет заданному условию)");
            }
                else
                    Console.WriteLine("(Треугольник не существует)");
            
            Console.ReadKey();
 
        }
    }
}

Решение задачи: «Если три числа могут быть длинами сторон равнобедренного тупоугольного треугольника, вычислить его площадь»

textual
Листинг программы
    class Program
    {
        static int sidesCount = 3;
        static void Main(string[] args)
        {
            double[] sides; initializeSides(out sides);
            double[] distinctSides = sides.Distinct().ToArray();
 
            
            if (isIsosceles(distinctSides)) //Равнобедренный или нет
            {
                int sameSideIndex = getSameSideIndex(sides, distinctSides);
                int baseSideIndex = getBaseSideIndexIfObtuse(distinctSides, sameSideIndex);
                if (baseSideIndex != -1) //Тупоугольный или нет
                {
                    double sameSide = distinctSides[sameSideIndex];
                    double baseSide = distinctSides[baseSideIndex];
                    double h = Math.Sqrt( sameSide * sameSide - (baseSide * baseSide) / 4);
                    double s = (baseSide * h) / 2;
                    Console.WriteLine("Площадь равна {0}", s);
                }   
                else Console.WriteLine("Не тупоугольный.");
            }
            else Console.WriteLine("Не равнобедренный.");
            Console.ReadKey();
        }
 
        static void initializeSides(out double[] sides)
        {
            sides = new double[sidesCount];
            for (int i = 0; i < sides.Length; i++)
            {
                Console.WriteLine("Enter a side #{0}", i - 1);
                sides[i] = Convert.ToDouble(Console.ReadLine());
            }
        }
 
        static bool isIsosceles(double[] distinctSides)
        {
            if(distinctSides.Count() == sidesCount)
            {
                return false;
            }
            return true;
        }
 
        static int getSameSideIndex(double[] sides, double[] distinctSides)
        {
            int sameSideIndex = -1; //Индекс первой эквивалентной стороны, ищем индекс \/
            for (int distSideI = 0; distSideI < distinctSides.Length; distSideI++)
            {
                int sameSidesCount = 0; 
                for(int sideI  = 0; sideI < sides.Length; sideI++)
                {
                    if (sides[sideI] == distinctSides[distSideI])
                        sameSidesCount++;
                }
                if (sameSidesCount > 1)
                {
                    sameSideIndex = distSideI;
                    break;
                }
            }
 
            if (sameSideIndex != -1)
            {
                return sameSideIndex;
            }
            return -1;
        }
 
        static int getBaseSideIndexIfObtuse(double[] distinctSides, int sameSideIndex)
        {
            for (int sideI = 0; sideI < distinctSides.Length; sideI++)
            {
                if (sideI != sameSideIndex && distinctSides[sideI] <= distinctSides[sameSideIndex])
                    return sideI; //
            }
            return -1;
        }
    }

Оцени полезность:

12   голосов , оценка 3.667 из 5
Похожие ответы