Advertisement
mrAnderson33

класс комплексного числа си шарп

Oct 28th, 2017
324
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 4.61 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5.  
  6. namespace lab07
  7. {
  8.  
  9.  
  10.     class ComplexNumber : EventArgs
  11.     {
  12.         public event  DivisionByZero MyEvent;
  13.  
  14.         public delegate void DivisionByZero(Event e);
  15.  
  16.         public double Real
  17.         {
  18.             get;
  19.             private set;
  20.         }
  21.         public double Imaginary
  22.         {
  23.             get;
  24.             private set;
  25.         }
  26.  
  27.         public double Magnitude
  28.         {
  29.             get
  30.             {
  31.                 return Math.Sqrt(Math.Pow(Real, 2) + Math.Pow(Imaginary, 2));
  32.             }
  33.         }
  34.         public double Phase
  35.         {
  36.             get
  37.             {
  38.                 return Math.Atan(Imaginary / Real);
  39.             }
  40.         }
  41.         public ComplexNumber()
  42.         {
  43.             Real = 0;
  44.             Imaginary = 0;
  45.  
  46.             MyEvent = (Event e) =>
  47.             {
  48.                 Console.WriteLine(e.message);
  49.             };
  50.         }
  51.  
  52.  
  53.         public ComplexNumber(double re = 0, double im = 0)
  54.         {
  55.             Real = re;
  56.             Imaginary = im;
  57.  
  58.             MyEvent = (Event e) =>
  59.             {
  60.                 Console.WriteLine(e.message);
  61.             };
  62.         }
  63.         public ComplexNumber(ComplexNumber value)
  64.         {
  65.             Real = value.Real;
  66.             Imaginary = value.Imaginary;
  67.  
  68.             MyEvent = (Event e) =>
  69.             {
  70.                 Console.WriteLine(e.message);
  71.             };
  72.         }
  73.  
  74.         public static double Abs(ComplexNumber value)
  75.         {
  76.             return value.Magnitude;
  77.         }
  78.  
  79.         public static ComplexNumber operator +(ComplexNumber left, ComplexNumber right)
  80.         {
  81.             return new ComplexNumber(left.Real + right.Real, left.Imaginary + right.Imaginary);
  82.         }
  83.  
  84.         public static ComplexNumber operator -(ComplexNumber left, ComplexNumber right)
  85.         {
  86.             return new ComplexNumber(left.Real - right.Real, left.Imaginary - right.Imaginary);
  87.         }
  88.  
  89.         public static ComplexNumber operator +(ComplexNumber left, int right)
  90.         {
  91.             return new ComplexNumber(left.Real + right, left.Imaginary);
  92.         }
  93.  
  94.         public static ComplexNumber operator -(ComplexNumber left, int right)
  95.         {
  96.             return new ComplexNumber(left.Real - right, left.Imaginary);
  97.         }
  98.  
  99.         public static ComplexNumber operator*(ComplexNumber left, ComplexNumber right)
  100.         {
  101.             var temp = new ComplexNumber();
  102.  
  103.             temp.Real = left.Real * right.Real - left.Imaginary * right.Imaginary;
  104.             temp.Imaginary = left.Real * right.Imaginary + left.Imaginary * right.Real;
  105.  
  106.  
  107.             return temp;
  108.         }
  109.  
  110.         public static ComplexNumber operator *(ComplexNumber left, double right)
  111.         {
  112.             return left * (new ComplexNumber(right));
  113.         }
  114.  
  115.         public static ComplexNumber operator /(ComplexNumber left, ComplexNumber right)
  116.         {
  117.             if ((right.Real == 0) && (right.Imaginary == 0))
  118.             {
  119.                 var ev = new Event("деление на ноль");
  120.                 left.MyEvent(ev);
  121.                 return null;
  122.  
  123.             }
  124.  
  125.             double tempReal = (left.Real * right.Real + left.Imaginary * right.Imaginary) / (Math.Pow(right.Real, 2) + Math.Pow(right.Imaginary, 2));
  126.             double tempImaginary = (left.Imaginary * right.Real - left.Real * right.Imaginary) / (Math.Pow(right.Real, 2) + Math.Pow(right.Imaginary, 2));
  127.  
  128.             return new ComplexNumber(tempReal, tempImaginary);
  129.         }
  130.  
  131.  
  132.         public static ComplexNumber Pow(ComplexNumber value, double power)
  133.         {
  134.             double tempReal = value.Real != 0 ? Math.Pow(value.Magnitude, power) * Math.Cos(power * value.Phase) : 0;
  135.             double tempImaginary = value.Imaginary != 0 ? Math.Pow(value.Magnitude, power) * Math.Sin(power * value.Phase) : 0;
  136.  
  137.  
  138.  
  139.             return new ComplexNumber(tempReal, tempImaginary);
  140.         }
  141.  
  142.         public static ComplexNumber FromPolarCoordinates(double magnitude, double phase)
  143.         {
  144.             double tempReal = magnitude * Math.Cos(phase);
  145.             double tempImaginary = magnitude * Math.Sin(phase);
  146.  
  147.             return new ComplexNumber(tempReal, tempImaginary);
  148.         }
  149.  
  150.         public static ComplexNumber Sqrt(ComplexNumber value)
  151.         {
  152.             return ComplexNumber.FromPolarCoordinates(Math.Sqrt(value.Magnitude), value.Phase / 2.0);
  153.         }
  154.         public override string ToString()
  155.         {
  156.             return String.Format("({0}, {1}i) ", Real, Imaginary);
  157.         }
  158.  
  159.     }
  160. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement