using System;
namespace TrigonometricSolver
{
class Program
{
static void Main(string[] args)
{
while (true)
{
[Link]("Seleccione una opción:");
[Link]("1. Calcular ángulos con 3 lados");
[Link]("2. Calcular ángulos con 2 lados y 1 ángulo");
[Link]("3. Calcular ángulos con 1 lado y 2 ángulos");
[Link]("4. Calcular medianas");
[Link]("5. Calcular alturas");
[Link]("6. Calcular mediatrices");
[Link]("7. Calcular bisectrices");
[Link]("8. Salir");
int opcion;
while (, out opcion) || opcion < 1 || opcion > 8)
{
[Link]("Opción inválida. Por favor, ingrese un número del 1 al 8.");
}
switch (opcion)
{
case 1:
CalcularPor3Lados();
break;
case 2:
CalcularPor2LadosYAngulo();
break;
case 3:
CalcularPor1LadoY2Angulos();
break;
case 4:
CalcularMedianas();
break;
case 5:
CalcularAlturas();
break;
case 6:
CalcularMediatrices();
break;
case 7:
CalcularBisectrices();
break;
case 8:
[Link]("Saliendo del programa...");
return;
}
}
}
static void CalcularPor3Lados()
{
double a = ObtenerValorPositivo("Ingrese el primer lado (a): ");
double b = ObtenerValorPositivo("Ingrese el segundo lado (b): ");
double c = ObtenerValorPositivo("Ingrese el tercer lado (c): ");
double anguloA = [Link]((b * b + c * c - a * a) / (2 * b * c)) * 180 / [Link];
double anguloB = [Link]((a * a + c * c - b * b) / (2 * a * c)) * 180 / [Link];
double anguloC = 180 - anguloA - anguloB;
[Link]("\nResultados:");
[Link]("Lados: a = " + a + ", b = " + b + ", c = " + c);
[Link]("Ángulos: A = " + anguloA + "°, B = " + anguloB + "°, C = " +
anguloC + "°\n");
}
static void CalcularPor2LadosYAngulo()
{
double a = ObtenerValorPositivo("Ingrese el primer lado (a): ");
double b = ObtenerValorPositivo("Ingrese el segundo lado (b): ");
double anguloC = ObtenerValorEntre(0, 180, "Ingrese el ángulo entre ellos (C) en
grados: ");
double c = [Link](a * a + b * b - 2 * a * b * [Link](anguloC * [Link] / 180));
double anguloA = [Link](a * [Link](anguloC * [Link] / 180) / c) * 180 /
[Link];
double anguloB = 180 - anguloA - anguloC;
[Link]("\nResultados:");
[Link]("Lados: a = " + a + ", b = " + b + ", c = " + c);
[Link]("Ángulos: A = " + anguloA + "°, B = " + anguloB + "°, C = " +
anguloC + "°\n");
}
static void CalcularPor1LadoY2Angulos()
{
double a = ObtenerValorPositivo("Ingrese el lado (a): ");
double anguloA = ObtenerValorEntre(0, 180, "Ingrese el primer ángulo (A) en
grados: ");
double anguloB = ObtenerValorEntre(0, 180 - anguloA, "Ingrese el segundo ángulo
(B) en grados: ");
double anguloC = 180 - anguloA - anguloB;
double b = a * [Link](anguloB * [Link] / 180) / [Link](anguloA * [Link] /
180);
double c = a * [Link](anguloC * [Link] / 180) / [Link](anguloA * [Link] /
180);
[Link]("\nResultados:");
[Link]("Lados: a = " + a + ", b = " + b + ", c = " + c);
[Link]("Ángulos: A = " + anguloA + "°, B = " + anguloB + "°, C = " +
anguloC + "°\n");
}
static void CalcularMedianas()
{
double a = ObtenerValorPositivo("Ingrese el primer lado (a): ");
double b = ObtenerValorPositivo("Ingrese el segundo lado (b): ");
double c = ObtenerValorPositivo("Ingrese el tercer lado (c): ");
double medianaA = 0.5 * [Link](2 * b * b + 2 * c * c - a * a);
double medianaB = 0.5 * [Link](2 * a * a + 2 * c * c - b * b);
double medianaC = 0.5 * [Link](2 * a * a + 2 * b * b - c * c);
[Link]("Medianas: Ma = " + medianaA + ", Mb = " + medianaB + ", Mc = "
+ medianaC + "\n");
}
static void CalcularAlturas()
{
double a = ObtenerValorPositivo("Ingrese el primer lado (a): ");
double b = ObtenerValorPositivo("Ingrese el segundo lado (b): ");
double c = ObtenerValorPositivo("Ingrese el tercer lado (c): ");
double s = (a + b + c) / 2;
double area = [Link](s * (s - a) * (s - b) * (s - c));
double alturaA = (2 * area) / a;
double alturaB = (2 * area) / b;
double alturaC = (2 * area) / c;
[Link]("Alturas: Ha = " + alturaA + ", Hb = " + alturaB + ", Hc = " +
alturaC + "\n");
}
static void CalcularMediatrices()
{
double xA = ObtenerValorReal("Ingrese la coordenada x del punto A: ");
double yA = ObtenerValorReal("Ingrese la coordenada y del punto A: ");
double xB = ObtenerValorReal("Ingrese la coordenada x del punto B: ");
double yB = ObtenerValorReal("Ingrese la coordenada y del punto B: ");
double xC = ObtenerValorReal("Ingrese la coordenada x del punto C: ");
double yC = ObtenerValorReal("Ingrese la coordenada y del punto C: ");
double xM_AB = (xA + xB) / 2;
double yM_AB = (yA + yB) / 2;
double pendiente_med_AB = (yB - yA) / (xB - xA);
if ([Link](pendiente_med_AB))
pendiente_med_AB = [Link];
double xM_BC = (xB + xC) / 2;
double yM_BC = (yB + yC) / 2;
double pendiente_med_BC = (yC - yB) / (xC - xB);
if ([Link](pendiente_med_BC))
pendiente_med_BC = [Link];
double xM_AC = (xA + xC) / 2;
double yM_AC = (yA + yC) / 2;
double pendiente_med_AC = (yC - yA) / (xC - xA);
if ([Link](pendiente_med_AC))
pendiente_med_AC = [Link];
[Link]("\nResultados:");
[Link]("Punto medio y pendiente de la mediatriz de AB: (" + xM_AB + ", "
+ yM_AB + "), pendiente = " + pendiente_med_AB);
[Link]("Punto medio y pendiente de la mediatriz de BC: (" + xM_BC + ",
" + yM_BC + "), pendiente = " + pendiente_med_BC);
[Link]("Punto medio y pendiente de la mediatriz de AC: (" + xM_AC + ",
" + yM_AC + "), pendiente = " + pendiente_med_AC + "\n");
}
static void CalcularBisectrices()
{
double a = ObtenerValorPositivo("Ingrese el primer lado (a): ");
double b = ObtenerValorPositivo("Ingrese el segundo lado (b): ");
double c = ObtenerValorPositivo("Ingrese el tercer lado (c): ");
double anguloA = [Link]((b * b + c * c - a * a) / (2 * b * c));
double anguloB = [Link]((a * a + c * c - b * b) / (2 * a * c));
double anguloC = [Link] - anguloA - anguloB;
double bisectrizA = 2 * b * c * [Link](anguloA / 2) / (b + c);
double bisectrizB = 2 * a * c * [Link](anguloB / 2) / (a + c);
double bisectrizC = 2 * a * b * [Link](anguloC / 2) / (a + b);
[Link]("\nResultados:");
[Link]("Bisectrices: Ba = " + bisectrizA + ", Bb = " + bisectrizB + ", Bc
= " + bisectrizC + "\n");
}
static double ObtenerValorPositivo(string mensaje)
{
double valor;
while (true)
{
[Link](mensaje);
if ([Link]([Link](), out valor) && valor > 0)
return valor;
[Link]("Valor inválido. Por favor, ingrese un número positivo.");
}
}
static double ObtenerValorEntre(double min, double max, string mensaje)
{
double valor;
while (true)
{
[Link](mensaje);
if ([Link]([Link](), out valor) && valor >= min && valor <=
max)
return valor;
[Link]($"Valor inválido. Por favor, ingrese un número entre {min} y
{max}.");
}
}
static double ObtenerValorReal(string mensaje)
{
double valor;
while (true)
{
[Link](mensaje);
if ([Link]([Link](), out valor))
return valor;
[Link]("Valor inválido. Por favor, ingrese un número real.");
}
}
}
}