using System;
namespace Recetas.Ch01
{
public class NumeroComplejo
{
public int Real
{
get;
set;
}
public int Imaginario
{
get;
set;
}
public NumeroComplejo(int real, int imaginario)
{
Real = real;
Imaginario = imaginario;
}
///<summary>
/// Adición de dos números complejos.
///</summary>
public static NumeroComplejo operator +(NumeroComplejo c1, NumeroComplejo c2)
{
return new NumeroComplejo( c1.Real + c2.Real, c1.Imaginario + c2.Imaginario);
}
///<summary>
/// Sustracción de dos números complejos.
///</summary>
public static NumeroComplejo operator -(NumeroComplejo c1, NumeroComplejo c2)
{
return new NumeroComplejo( c1.Real - c2.Real, c1.Imaginario - c2.Imaginario);
}
///<summary>
/// Multiplica dos números complejos.
///</summary>
public static NumeroComplejo operator *(NumeroComplejo c1, NumeroComplejo c2)
{
// Multiplicamos aplicando el método FOIL (español, PEIU: Primeros, Exteriores, Interiores, Últimos)
int firstTerms = c1.Real * c2.Real;
int outsideTerms = c1.Real * c2.Imaginario;
int insideTerms = c1.Imaginario * c2.Real;
int lastTerms = c1.Imaginario * c2.Imaginario * -1;
return new NumeroComplejo(firstTerms + lastTerms, outsideTerms + insideTerms);
}
///<summary>
/// Divide dos números complejos.
///</summary>
public static NumeroComplejo operator /(NumeroComplejo c1, NumeroComplejo c2)
{
// Conjugado:
NumeroComplejo tmp = new NumeroComplejo(c2.Real, Convert.ToInt32(Math.Abs(c2.Imaginario)));
return new NumeroComplejo((c1*tmp).Real, (c2*tmp).Imaginario);
}
///<summary>
/// Sobreescribe el método ToString para representar números complejos.
///</summary>
public override string ToString()
{
return (String.Format("{0} + {1}i", Real, Imaginario));
}
public static void Main()
{
// Creación de dos instancias de NumeroComplejo
NumeroComplejo c1 = new NumeroComplejo(3, 7);
NumeroComplejo c2 = new NumeroComplejo(11, 13);
// Operaciones aritméticas de números complejos
NumeroComplejo adicion = c1 + c2;
NumeroComplejo sustraccion = c1 - c2;
NumeroComplejo cociente = c1 / c2;
NumeroComplejo producto = c1 * c2;
// Impresión de resultados operaciones
Console.WriteLine("Primer número complejo: {0}", c1);
Console.WriteLine("Segundo número complejo: {0}", c2);
Console.WriteLine("Adición: {0}", adicion);
Console.WriteLine("Sustracción: {0}", sustraccion);
Console.WriteLine("Producto: {0}", producto);
Console.WriteLine("Cociente: {0}", cociente);
Console.WriteLine();
}
}
}