Написать консольную программу, реализующую арифметику комплексных чисел - C#
Формулировка задачи:
Написать консольную программу на C#, реализующую арифметику комплексных чисел. Должны быть как минимум определены операторы +, +=, -, -=, *, *=, /, /=, =, допускающие построение арифметических выражений в том виде, в каком они справедливы для double, а также позволяющие в одном выражении смешивать комплексные и вещественные числа.
Определите функции arg, mod, Re, Im
Предусмотреть печать комплексных чисел любым удобным способом
Текстовым представлением комплексного числа считать строки вида a+-bi, где а и b - представление чисел типа double.
Решение задачи: «Написать консольную программу, реализующую арифметику комплексных чисел»
textual
Листинг программы
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ComplexNumber_Project {
class Complex {
//Автосвойства(с private сеттерами)
public double Real { get; private set; }
public double Image { get; private set; }
//Конструктор
public Complex(double r, double im) {
Real = r;
Image = im;
}
//Переопределение метода ToString();
public override string ToString() {
return string.Format("{0} {1}i", Real, Image);
}
//Перегрузка оператора + для двух комплексных чисел
public static Complex operator +(Complex c1, Complex c2) {
return new Complex(c1.Real + c2.Real, c1.Image + c2.Image);
}
//Перегрузка оператора + для комплексного числа и числа типа int
public static Complex operator +(Complex c, int n) {
return new Complex(c.Real + n, c.Image);
}
//Перегрузка оператора - для двух комплексных чисел
public static Complex operator -(Complex c1, Complex c2) {
return new Complex(c1.Real - c2.Real, c1.Image - c2.Image);
}
//Перегрузка оператора - для комплексного числа и числа типа int
public static Complex operator -(Complex c, int n) {
return new Complex(c.Real - n, c.Image);
}
//Перегрузка оператора * для двух комплексных чисел
public static Complex operator *(Complex c1, Complex c2) {
return new Complex(c1.Real * c2.Real, c1.Image * c2.Image);
}
//Перегрузка оператора * для комплексного числа и числа типа int
public static Complex operator *(Complex c, int n) {
return new Complex(c.Real * n, c.Image);
}
//Перегрузка оператора / для двух комплексных чисел
public static Complex operator /(Complex c1, Complex c2) {
return new Complex(c1.Real / c2.Real, c1.Image / c2.Image);
}
//Перегрузка оператора / для комплексного числа и числа типа int
public static Complex operator /(Complex c, int n) {
return new Complex(c.Real / n, c.Image);
}
//Перегрузка оператора == для двух комплексных чисел
public static bool operator==(Complex c1, Complex c2){
return c1.Equals(c2);
}
//Перегрузка оператора != для двух комплексных чисел
public static bool operator !=(Complex c1, Complex c2) {
return !c1.Equals(c2);
}
//Переопределение Equals()
public override bool Equals(object obj) {
if (!(obj is Complex))
return false;
return (((this.Real.CompareTo(((Complex)obj).Real))==0) &&
((this.Image.CompareTo(((Complex)obj).Image)))==0);
}
//Переопределение GetHashCode()
public override int GetHashCode() {
return this.ToString().GetHashCode();
}
}
}