Data hosted with ♥ by Pastebin.com - Download Raw - See Original
  1. using System;
  2.  
  3. namespace Recetas.Ch01
  4. {
  5.     public class NumeroComplejo
  6.     {
  7.         public int Real
  8.         {
  9.             get;
  10.             set;
  11.         }
  12.        
  13.         public int Imaginario
  14.         {
  15.             get;
  16.             set;
  17.         }
  18.        
  19.         public NumeroComplejo(int real, int imaginario)
  20.         {
  21.             Real = real;
  22.             Imaginario = imaginario;
  23.         }
  24.        
  25.         ///<summary>
  26.         /// Adición de dos números complejos.
  27.         ///</summary>
  28.         public static NumeroComplejo operator +(NumeroComplejo c1, NumeroComplejo c2)
  29.         {
  30.             return new NumeroComplejo( c1.Real + c2.Real, c1.Imaginario + c2.Imaginario);
  31.         }
  32.        
  33.         ///<summary>
  34.         /// Sustracción de dos números complejos.
  35.         ///</summary>
  36.         public static NumeroComplejo operator -(NumeroComplejo c1, NumeroComplejo c2)
  37.         {
  38.             return new NumeroComplejo( c1.Real - c2.Real, c1.Imaginario - c2.Imaginario);
  39.         }
  40.        
  41.         ///<summary>
  42.         /// Multiplica dos números complejos.
  43.         ///</summary>
  44.         public static NumeroComplejo operator *(NumeroComplejo c1, NumeroComplejo c2)
  45.         {
  46.             // Multiplicamos aplicando el método FOIL (español, PEIU: Primeros, Exteriores, Interiores, Últimos)
  47.             int firstTerms = c1.Real * c2.Real;
  48.             int outsideTerms = c1.Real * c2.Imaginario;
  49.             int insideTerms = c1.Imaginario * c2.Real;
  50.             int lastTerms = c1.Imaginario * c2.Imaginario * -1;
  51.            
  52.             return new NumeroComplejo(firstTerms + lastTerms, outsideTerms + insideTerms);
  53.         }
  54.        
  55.         ///<summary>
  56.         /// Divide dos números complejos.
  57.         ///</summary>
  58.         public static NumeroComplejo operator /(NumeroComplejo c1,  NumeroComplejo c2)
  59.         {
  60.             // Conjugado:
  61.             NumeroComplejo tmp = new NumeroComplejo(c2.Real, Convert.ToInt32(Math.Abs(c2.Imaginario)));
  62.            
  63.             return new NumeroComplejo((c1*tmp).Real, (c2*tmp).Imaginario);
  64.         }
  65.        
  66.         ///<summary>
  67.         /// Sobreescribe el método ToString para representar números complejos.
  68.         ///</summary>
  69.         public override string ToString()
  70.         {
  71.             return (String.Format("{0} + {1}i", Real, Imaginario));
  72.         }
  73.        
  74.         public static void Main()
  75.         {
  76.             // Creación de dos instancias de NumeroComplejo
  77.             NumeroComplejo c1 = new NumeroComplejo(3, 7);
  78.             NumeroComplejo c2 = new NumeroComplejo(11, 13);
  79.            
  80.             // Operaciones aritméticas de números complejos
  81.             NumeroComplejo adicion = c1 + c2;
  82.             NumeroComplejo sustraccion = c1 - c2;
  83.             NumeroComplejo cociente = c1 / c2;
  84.             NumeroComplejo producto = c1 * c2;
  85.            
  86.             // Impresión de resultados operaciones
  87.             Console.WriteLine("Primer número complejo: {0}", c1);
  88.             Console.WriteLine("Segundo número complejo: {0}", c2);
  89.            
  90.             Console.WriteLine("Adición: {0}", adicion);
  91.             Console.WriteLine("Sustracción: {0}", sustraccion);
  92.             Console.WriteLine("Producto: {0}", producto);
  93.             Console.WriteLine("Cociente: {0}", cociente);
  94.            
  95.             Console.WriteLine();
  96.         }
  97.     }
  98. }