Описать класс, содержащий коллекцию комплексных чисел - C#

Узнай цену своей работы

Формулировка задачи:

Ребят, подскажите, как реализовать в С# класс, содержащий коллекцию комплексных чисел,и как с ним работать для того, чтобы найти сумму наибольшего и наименьшего значения в коллекциях?

Решение задачи: «Описать класс, содержащий коллекцию комплексных чисел»

textual
Листинг программы
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace CubicEquation
{
    public class Complex : IComparable<Complex>, IFormattable
    {
        public double Real { get; set; }
        public double Imaginary { get; set; }
 
        public Complex()
        {
 
        }
 
        public Complex(double real)
        {
            Real = real;
            Imaginary = 0;
        }
 
        public Complex(double real, double imaginary)
        {
            Real = real;
            Imaginary = imaginary;
        }
 
        public static Complex operator +(Complex a, Complex b)
        {
            return new Complex()
            {
                Imaginary = a.Imaginary + b.Imaginary,
                Real = a.Real + b.Real
            };
        }
 
        public static Complex operator -(Complex a, Complex b)
        {
            return new Complex()
            {
                Imaginary = a.Imaginary - b.Imaginary,
                Real = a.Real - b.Real
            };
        }
 
        public static Complex operator +(Complex a, double k)
        {
            return new Complex()
            {
                Imaginary = a.Imaginary,
                Real = a.Real + k
            };
        }
 
        public static Complex operator -(Complex a, double k)
        {
            return new Complex()
            {
                Imaginary = a.Imaginary,
                Real = a.Real - k
            };
        }
 
        // Перегрузка оператора равенства. ВАЖНО, т.к. сравниваются числа с плавающей запятой, то сравнивать нужно их разницу по модулю
        //
        public static bool operator ==(Complex a, Complex b)
        {
            if ((Math.Abs(a.Imaginary - b.Imaginary) < 0.0000001 && Math.Abs(a.Real - b.Real) < 0.0000001))
            {
                return true;
            }
            return false;
        }
 
        public static bool operator !=(Complex a, Complex b)
        {
            if (Math.Abs(a.Imaginary - b.Imaginary) > 0.0000001 && Math.Abs(a.Real - b.Real) > 0.0000001)
            {
                return true;
            }
            return false;
        }
 
 
        public override bool Equals(System.Object obj)
        {
            if (obj == null)
            {
                return false;
            }
 
            Complex n = obj as Complex;
            if ((System.Object)n == null)
            {
                return false;
            }
 
            return (Math.Abs(Imaginary - n.Imaginary) < 0.0000001) && (Math.Abs(Real - n.Real) < 0.0000001);
        }
 
        public bool Equals(Complex n)
        {
            if ((object)n == null)
            {
                return false;
            }
 
            return (Math.Abs(Imaginary - n.Imaginary) < 0.0000001) && (Math.Abs(Real - n.Real) < 0.0000001);
        }
 
        // Указаний по реализации нет. Реализован таким образом
        public override int GetHashCode()
        {
            return (int)Imaginary ^ (int)Real;
        }
 
        public override string ToString()
        {
            if (Imaginary == 0) return string.Format("{0}", Math.Round(Real,6));
            return string.Format("{0} + {1}i", Math.Round(Real,6), Math.Round(Imaginary,6));
        }
 
 
        public string ToString(string format, IFormatProvider formatProvider)
        {
 
            switch (format.ToUpperInvariant())
            {
                case "P":
                    return string.Format("({0}, {1})", Real, Imaginary);
                case "A":
                    return string.Format("({0} + i{1})", Real, Imaginary);
                default:
                    throw new FormatException(String.Format("Формат строки: {0} - не поддерживается", format));
            }
        }
 
        // Возможно лучшее решение. Т.к. указаний не дано по сравнению комплексных чисел (только равенства и неравенство),
        // то реализовано таким образом
        public int CompareTo(Complex other)
        {
            if (this == other) return 0;
 
            if (Math.Abs(this.Real - other.Real) < 0.0000001)
            {
                if (this.Imaginary - other.Imaginary > 0) return 1;
                else return -1;
            }
 
            if (this.Real > other.Real) return 1;
            return -1;
        }
 
        // Задания по перегрузки операторов умножения и деления также нет, но вот они на всякий пожарный.
 
        public static Complex operator *(Complex a, Complex b)
        {
            return new Complex()
            {
                Real = a.Real * b.Real - a.Imaginary * b.Imaginary,
                Imaginary = a.Real * b.Imaginary + a.Imaginary * b.Real
            };
        }
 
        public static Complex operator *(Complex a, double d)
        {
            return new Complex()
            {
                Real = a.Real * d,
                Imaginary = a.Imaginary * d
            };
        }
 
        public static Complex operator /(Complex a, Complex b)
        {
            return new Complex()
            {
                Real = (a.Real * b.Real + a.Imaginary * b.Imaginary) / (b.Real * b.Real + b.Imaginary * b.Imaginary),
                Imaginary = (a.Imaginary * b.Real - a.Real * b.Imaginary) / (b.Real * b.Real + b.Imaginary * b.Imaginary)
            };
        }
 
        public static Complex operator /(Complex a, double d)
        {
            return new Complex()
            {
                Real = a.Real / d,
                Imaginary = a.Imaginary / d
            };
        }
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 4.1 из 5
Похожие ответы