C/C++

Помогите пожалуйста решить задачу на языке С#.

Помогите пожалуйста решить задачу на языке С#. Простым новичковым способом

1.Пусть элементами равностороннего треугольника являются: 1) сторона а, 2) площадь, 3) высота, 4) радиус вписанной окружности r, 5) радиус описанной окружности R. Составить программу. Которая по заданному номеру и значению соответствующего элемента вычисляла бы значение всех остальных элементов треугольника.
using System;
namespace Answer {
class Program {
static void Main() {
var triangle = new Triangle();
while (true) {
Console.Clear();
Console.WriteLine("1 - Длина стороны");
Console.WriteLine("2 - Площадь");
Console.WriteLine("3 - Высота");
Console.WriteLine("4 - Радиус вписанной окружности");
Console.WriteLine("5 - Радиус описанной окружности");
Console.Write("Ваш выбор: ");
var choice = Console.ReadLine();
Console.Write("Ввведите значение: ");
var value = double.Parse(Console.ReadLine());
var error = false;
switch (choice) {
case "1": triangle.Side = value; break;
case "2": triangle.Area = value; break;
case "3": triangle.Height = value; break;
case "4": triangle.Inscribed = value; break;
case "5": triangle.Described = value; break;
default: error = true; break;
}
if (error) Console.WriteLine("Ошибка выбора!");
else {
Console.WriteLine($"Длина стороны: {triangle.Side:F2}");
Console.WriteLine($"Площадь: {triangle.Area:F2}");
Console.WriteLine($"Высота: {triangle.Height:F2}");
Console.WriteLine($"Радиус вписанной окружности: {triangle.Inscribed:F2}");
Console.WriteLine($"Радиус описанной окружности: {triangle.Described:F2}");
}
Console.WriteLine("Для повтора нажмите любую клавишу... ");
Console.ReadKey();
}
}
}
struct Triangle {
private double side;
private double area;
private double height;
private double inscribed;
private double described;
public double Side {
get { return side; }
set {
side = value;
area = Math.Sqrt(3.0) / 4.0 * Math.Pow(side, 2);
height = Math.Sqrt(3.0) / 2.0 * side;
inscribed = Math.Sqrt(3.0) / 6.0 * side;
described = Math.Sqrt(3.0) / 3.0 * side;
}
}
public double Area {
get { return area; }
set {
area = value;
side = 4.0 * area / Math.Sqrt(3.0);
height = Math.Sqrt(3.0) / 2.0 * side;
inscribed = Math.Sqrt(3.0) / 6.0 * side;
described = Math.Sqrt(3.0) / 3.0 * side;
}
}
public double Height {
get { return height; }
set {
height = value;
side = 2 * height / Math.Sqrt(3.0);
area = Math.Sqrt(3.0) / 4.0 * Math.Pow(side, 2);
inscribed = Math.Sqrt(3.0) / 6.0 * side;
described = Math.Sqrt(3.0) / 3.0 * side;
}
}
public double Inscribed {
get { return inscribed; }
set {
inscribed = value;
side = 6 * inscribed / Math.Sqrt(3.0);
height = Math.Sqrt(3.0) / 2.0 * side;
area = Math.Sqrt(3.0) / 4.0 * Math.Pow(side, 2);
described = Math.Sqrt(3.0) / 3.0 * side;
}
}
public double Described {
get { return described; }
set {
described = value;
side = 3 * described / Math.Sqrt(3.0);
height = Math.Sqrt(3.0) / 2.0 * side;
area = Math.Sqrt(3.0) / 4.0 * Math.Pow(side, 2);
inscribed = Math.Sqrt(3.0) / 6.0 * side;
}
}
}
}
Aibek Murzayev
Aibek Murzayev
97 693
Лучший ответ
Фасоля Дмитрий А зачем хранить все значения и при каждом чихе перерасчитывать их все, когда наша фигура характеризуется единственной величиной? Это имело бы смысел как некая оптимизация, если нам нужно очень напряжно работать с миллионом таких треугольников, но в данном случае такое количество копипасты - явный оверкилл...
class EquilateralTriangle
{
public EquilateralTriangle()
{
Side = 0;
}
private double MagicConst = Math.Sqrt(3);
public double Side { get; set; }
public double Square { get => MagicConst * Side * Side / 4; set { Side = Math.Sqrt(value * 4 / MagicConst); } }
public double Height { get => MagicConst * Side / 2; set { Side = 2 * value / MagicConst; } }
public double InscribedCircleR { get => MagicConst * Side / 6; set { Side = value * 6 / MagicConst; } }
public double CircumscribedCircleR { get => InscribedCircleR * 2; set { InscribedCircleR = value / 2; } }
public override string ToString() => $"Side={Side} Square={Square} Height={Height} Inscribed Circle Radius={InscribedCircleR} Circumscribed Circle Radius={CircumscribedCircleR}";
}

class Program
{
static void Main(string[] args)
{
Console.WriteLine($"Side={1} Square={2} Height={3} Inscribed Circle Radius={4} Circumscribed Circle Radius={5}");
int m = int.Parse(Console.ReadLine()); //Data input
Console.WriteLine("Enter value: ");
double x = double.Parse(Console.ReadLine());
EquilateralTriangle t = new EquilateralTriangle();
switch (m)
{
case 1:
{
t.Side = x;
break;
}
case 2:
{
t.Square = x;
break;
}
case 3:
{
t.Height = x;
break;
}
case 4:
{
t.InscribedCircleR = x;
break;
}
case 5:
{
t.CircumscribedCircleR= x;
break;
}
default:
throw new Exception("Invalid input");
}
Console.WriteLine(t);
Console.ReadLine();
}
}
Фасоля Дмитрий
Фасоля Дмитрий
78 157