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

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

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

Помогите пожалуйста с задачей. Ввести три числа. Если они могут быть длинами сторон равнобедренного тупоугольного треугольника, вычислить его площадь. Вывести длины сторон и площадь в порядке возрастания Вот, что получилось, но там что-то не правильно, программа работает не так и нужно вывести значения в порядке возрастания.
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. namespace Triangle
  6. {
  7. class Program
  8. {
  9. static void Main(string[] args)
  10. {
  11. /*Ввести три числа. Если они могут быть длинами сторон равнобедренного тупоугольного треугольника,
  12. вычислить его площадь. Вывести длины сторон и площадь в порядке возрастания.*/
  13. double a, b, c;
  14. //a, b, c-стороны треугольника
  15. Console.Write("a= ");
  16. a = Convert.ToDouble(Console.ReadLine());
  17. Console.Write("b= ");
  18. b = Convert.ToDouble(Console.ReadLine());
  19. Console.Write("c= ");
  20. c = Convert.ToDouble(Console.ReadLine());
  21. if ((a + b >= c) || (a + c >= b) || (b + c >= a))
  22. {
  23. if (a == b || a == c || b == c)
  24. {
  25. if ((a * a) + (b * b) < (c * c) || (a * a) + (c * c) < (b * b) || (c * c) + (b * b) < (a * a))
  26. {
  27. double p = (a + b + c) / 2;
  28. double s = Math.Sqrt(p - (p - a) * (p - b) * (p - c));
  29. Console.WriteLine("Площадь равна {0}", s);
  30. }
  31. else
  32. Console.WriteLine("(Треугольник не удовлетворяет заданному условию)");
  33. }
  34. else
  35. Console.WriteLine("(Треугольник не удовлетворяет заданному условию)");
  36. }
  37. else
  38. Console.WriteLine("(Треугольник не существует)");
  39. Console.ReadKey();
  40. }
  41. }
  42. }

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

textual
Листинг программы
  1.     class Program
  2.     {
  3.         static int sidesCount = 3;
  4.         static void Main(string[] args)
  5.         {
  6.             double[] sides; initializeSides(out sides);
  7.             double[] distinctSides = sides.Distinct().ToArray();
  8.  
  9.            
  10.             if (isIsosceles(distinctSides)) //Равнобедренный или нет
  11.             {
  12.                 int sameSideIndex = getSameSideIndex(sides, distinctSides);
  13.                 int baseSideIndex = getBaseSideIndexIfObtuse(distinctSides, sameSideIndex);
  14.                 if (baseSideIndex != -1) //Тупоугольный или нет
  15.                 {
  16.                     double sameSide = distinctSides[sameSideIndex];
  17.                     double baseSide = distinctSides[baseSideIndex];
  18.                     double h = Math.Sqrt( sameSide * sameSide - (baseSide * baseSide) / 4);
  19.                     double s = (baseSide * h) / 2;
  20.                     Console.WriteLine("Площадь равна {0}", s);
  21.                 }  
  22.                 else Console.WriteLine("Не тупоугольный.");
  23.             }
  24.             else Console.WriteLine("Не равнобедренный.");
  25.             Console.ReadKey();
  26.         }
  27.  
  28.         static void initializeSides(out double[] sides)
  29.         {
  30.             sides = new double[sidesCount];
  31.             for (int i = 0; i < sides.Length; i++)
  32.             {
  33.                 Console.WriteLine("Enter a side #{0}", i - 1);
  34.                 sides[i] = Convert.ToDouble(Console.ReadLine());
  35.             }
  36.         }
  37.  
  38.         static bool isIsosceles(double[] distinctSides)
  39.         {
  40.             if(distinctSides.Count() == sidesCount)
  41.             {
  42.                 return false;
  43.             }
  44.             return true;
  45.         }
  46.  
  47.         static int getSameSideIndex(double[] sides, double[] distinctSides)
  48.         {
  49.             int sameSideIndex = -1; //Индекс первой эквивалентной стороны, ищем индекс \/
  50.             for (int distSideI = 0; distSideI < distinctSides.Length; distSideI++)
  51.             {
  52.                 int sameSidesCount = 0;
  53.                 for(int sideI  = 0; sideI < sides.Length; sideI++)
  54.                 {
  55.                     if (sides[sideI] == distinctSides[distSideI])
  56.                         sameSidesCount++;
  57.                 }
  58.                 if (sameSidesCount > 1)
  59.                 {
  60.                     sameSideIndex = distSideI;
  61.                     break;
  62.                 }
  63.             }
  64.  
  65.             if (sameSideIndex != -1)
  66.             {
  67.                 return sameSideIndex;
  68.             }
  69.             return -1;
  70.         }
  71.  
  72.         static int getBaseSideIndexIfObtuse(double[] distinctSides, int sameSideIndex)
  73.         {
  74.             for (int sideI = 0; sideI < distinctSides.Length; sideI++)
  75.             {
  76.                 if (sideI != sameSideIndex && distinctSides[sideI] <= distinctSides[sameSideIndex])
  77.                     return sideI; //
  78.             }
  79.             return -1;
  80.         }
  81.     }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

12   голосов , оценка 3.667 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы