namespace OperacionesNumerosComplejos
public double Real { get; set; }
public double Imaginario { get; set; }
public Complejo(double real, double imaginario)
public static Complejo operator +(Complejo c1, Complejo c2)
return new Complejo(c1.Real + c2.Real, c1.Imaginario + c2.Imaginario);
public static Complejo operator -(Complejo c1, Complejo c2)
return new Complejo(c1.Real - c2.Real, c1.Imaginario - c2.Imaginario);
public static Complejo operator *(Complejo c1, Complejo c2)
double real = c1.Real * c2.Real - c1.Imaginario * c2.Imaginario;
double imaginario = c1.Real * c2.Imaginario + c1.Imaginario * c2.Real;
return new Complejo(real, imaginario);
public static Complejo operator /(Complejo c1, Complejo c2)
double divisor = c2.Real * c2.Real + c2.Imaginario * c2.Imaginario;
throw new DivideByZeroException("No se puede dividir entre un número complejo con parte real e imaginaria igual a cero.");
double real = (c1.Real * c2.Real + c1.Imaginario * c2.Imaginario) / divisor;
double imaginario = (c1.Imaginario * c2.Real - c1.Real * c2.Imaginario) / divisor;
return new Complejo(real, imaginario);
public override string ToString()
return $"{Real} + {Imaginario}i";
static void Main(string[] args)
Console.WriteLine("Calculadora de Números Complejos\n");
Console.Write("Introduce la parte real del primer número complejo (o 'fin' para salir): ");
string inputReal1 = Console.ReadLine();
if (inputReal1.ToLower() == "fin") break;
Console.Write("Introduce la parte imaginaria del primer número complejo: ");
string inputImag1 = Console.ReadLine();
if (inputImag1.ToLower() == "fin") break;
Console.Write("Introduce la parte real del segundo número complejo: ");
string inputReal2 = Console.ReadLine();
if (inputReal2.ToLower() == "fin") break;
Console.Write("Introduce la parte imaginaria del segundo número complejo: ");
string inputImag2 = Console.ReadLine();
if (inputImag2.ToLower() == "fin") break;
double real1 = double.Parse(inputReal1);
double imag1 = double.Parse(inputImag1);
double real2 = double.Parse(inputReal2);
double imag2 = double.Parse(inputImag2);
Complejo c1 = new Complejo(real1, imag1);
Complejo c2 = new Complejo(real2, imag2);
Console.WriteLine($"\nResultados de las operaciones:");
Console.WriteLine($"Suma: {c1} + {c2} = {c1 + c2}");
Console.WriteLine($"Resta: {c1} - {c2} = {c1 - c2}");
Console.WriteLine($"Multiplicación: {c1} * {c2} = {c1 * c2}");
Console.WriteLine($"División: {c1} / {c2} = {c1 / c2}\n");
Console.WriteLine("Por favor, introduce números válidos.");
catch (DivideByZeroException ex)
Console.WriteLine(ex.Message);
Console.WriteLine($"Ocurrió un error: {ex.Message}");
Console.WriteLine("Programa terminado.");