Если три числа могут быть длинами сторон равнобедренного тупоугольного треугольника, вычислить его площадь - 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; } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д