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