fork download
  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. }
Success #stdin #stdout 0.05s 33984KB
stdin
Standard input is empty
stdout
Primer número complejo: 3 + 7i
Segundo número complejo: 11 + 13i
Adición: 14 + 20i
Sustracción: -8 + -6i
Producto: -58 + 116i
Cociente: -58 + 286i