Если три числа могут быть длинами сторон равнобедренного тупоугольного треугольника, вычислить его площадь - 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;
}
}