Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- namespace lab07
- {
- class ComplexNumber : EventArgs
- {
- public event DivisionByZero MyEvent;
- public delegate void DivisionByZero(Event e);
- public double Real
- {
- get;
- private set;
- }
- public double Imaginary
- {
- get;
- private set;
- }
- public double Magnitude
- {
- get
- {
- return Math.Sqrt(Math.Pow(Real, 2) + Math.Pow(Imaginary, 2));
- }
- }
- public double Phase
- {
- get
- {
- return Math.Atan(Imaginary / Real);
- }
- }
- public ComplexNumber()
- {
- Real = 0;
- Imaginary = 0;
- MyEvent = (Event e) =>
- {
- Console.WriteLine(e.message);
- };
- }
- public ComplexNumber(double re = 0, double im = 0)
- {
- Real = re;
- Imaginary = im;
- MyEvent = (Event e) =>
- {
- Console.WriteLine(e.message);
- };
- }
- public ComplexNumber(ComplexNumber value)
- {
- Real = value.Real;
- Imaginary = value.Imaginary;
- MyEvent = (Event e) =>
- {
- Console.WriteLine(e.message);
- };
- }
- public static double Abs(ComplexNumber value)
- {
- return value.Magnitude;
- }
- public static ComplexNumber operator +(ComplexNumber left, ComplexNumber right)
- {
- return new ComplexNumber(left.Real + right.Real, left.Imaginary + right.Imaginary);
- }
- public static ComplexNumber operator -(ComplexNumber left, ComplexNumber right)
- {
- return new ComplexNumber(left.Real - right.Real, left.Imaginary - right.Imaginary);
- }
- public static ComplexNumber operator +(ComplexNumber left, int right)
- {
- return new ComplexNumber(left.Real + right, left.Imaginary);
- }
- public static ComplexNumber operator -(ComplexNumber left, int right)
- {
- return new ComplexNumber(left.Real - right, left.Imaginary);
- }
- public static ComplexNumber operator*(ComplexNumber left, ComplexNumber right)
- {
- var temp = new ComplexNumber();
- temp.Real = left.Real * right.Real - left.Imaginary * right.Imaginary;
- temp.Imaginary = left.Real * right.Imaginary + left.Imaginary * right.Real;
- return temp;
- }
- public static ComplexNumber operator *(ComplexNumber left, double right)
- {
- return left * (new ComplexNumber(right));
- }
- public static ComplexNumber operator /(ComplexNumber left, ComplexNumber right)
- {
- if ((right.Real == 0) && (right.Imaginary == 0))
- {
- var ev = new Event("деление на ноль");
- left.MyEvent(ev);
- return null;
- }
- double tempReal = (left.Real * right.Real + left.Imaginary * right.Imaginary) / (Math.Pow(right.Real, 2) + Math.Pow(right.Imaginary, 2));
- double tempImaginary = (left.Imaginary * right.Real - left.Real * right.Imaginary) / (Math.Pow(right.Real, 2) + Math.Pow(right.Imaginary, 2));
- return new ComplexNumber(tempReal, tempImaginary);
- }
- public static ComplexNumber Pow(ComplexNumber value, double power)
- {
- double tempReal = value.Real != 0 ? Math.Pow(value.Magnitude, power) * Math.Cos(power * value.Phase) : 0;
- double tempImaginary = value.Imaginary != 0 ? Math.Pow(value.Magnitude, power) * Math.Sin(power * value.Phase) : 0;
- return new ComplexNumber(tempReal, tempImaginary);
- }
- public static ComplexNumber FromPolarCoordinates(double magnitude, double phase)
- {
- double tempReal = magnitude * Math.Cos(phase);
- double tempImaginary = magnitude * Math.Sin(phase);
- return new ComplexNumber(tempReal, tempImaginary);
- }
- public static ComplexNumber Sqrt(ComplexNumber value)
- {
- return ComplexNumber.FromPolarCoordinates(Math.Sqrt(value.Magnitude), value.Phase / 2.0);
- }
- public override string ToString()
- {
- return String.Format("({0}, {1}i) ", Real, Imaginary);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement