Реализовать интерфейс IComparable и перегрузить операции отношения для реализации семантики - C#
Формулировка задачи:
Нужно в программу добавить реализацию интерфейса IComparable и перегрузить операции отношения для реализации семантики.
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Lab_09 { class Point { public double x=2, y=2; public Point() { this.x = 3; this.y = 3; } public Point (double x, double y) { this.x = x; this.y = y; } public double GetX() //Метод получения координаты x { return x; } public double GetY() //Метод получения координаты y { return y; } virtual public void Data() { Console.WriteLine("Point: x={0}, y={1};", x, y); } virtual public void ChangeCo() { x = 15; y = 20; } } class ColoredPoint : Point { private string colour; public ColoredPoint() { this.colour = "white"; } public ColoredPoint(double x, double y, string colour) : base(x, y) { this.colour = "white"; } override public void Data() { Console.WriteLine("ColoredPoint: x={0}, y={1}, colour={2};", x, y, colour); } override public void ChangeCo() { x = 22; y = 12; colour = "gray"; } } class Line: Point { public double x1, y1; public Line() //Конструктор по умолчанию { this.x1 = 1; this.y1 = 1; } public Line(double x, double y, double x1, double y1) : base(x, y) { this.x1 = x1; this.y1 = y1; } override public void Data() { Console.WriteLine("Line: x={0}, y={1}, x1={2}, y1={3};", x, y, x1, y1); } override public void ChangeCo() { x = 2; y = 4; x1 = 4; y1 = 2; } } class ColoredLine : Line { public string colour; public ColoredLine() / { this.colour = "white"; this.x1 = 1; this.y1 = 1; } public ColoredLine(double x, double y, double x1, double y1, string colour) : base(x, y, x1, y1) { this.colour = "white"; this.x1 = 1; this.y1 = 1; } override public void Data() { Console.WriteLine("ColoredLine: x={0}, y={1}, x1={2}, y1={3}, colour={4};", x, y, x1, y1, colour); } override public void ChangeCo() { x = 2; y = 1; x1 = 2; y1 = 1; colour = "blue"; } } class PolyLine : Line { public double x2, y2, x3, y3, x4, y4; public PolyLine() { this.x1 = 1; this.y1 = 1; this.x2 = 2; this.y2 = 3; this.x3 = 4; this.y3 = 5.5; this.x4 = 2.4; this.y4 = 1.5; } public PolyLine(double x, double y, double x1, double y1, double x2, double y2) : base(x, y, x1, y1) { this.x1 = 1; this.y1 = 1; this.x2 = 2; this.y2 = 2; this.x3 = 4; this.y3 = 5.5; this.x4 = 2.4; this.y4 = 1.5; } override public void Data() { Console.Write("PolyLine: x{0}={4}, y{0}={5}, x{1}={6}, y{1}={7}, x{2}={8}, y{2}={9}, x{3}={10}, y{3}={11};", 1, 2, 3, 4, x1, y1, x2, y2, x3, y3, x4, y4); } override public void ChangeCo() { x4 = x4/2; y4 = y4/2; x1 = x1/2; y1 = y1/2; x2 = x2/2; y2 = y2/2; x3 = x3/2; y3 = y3/2; } } class Program { static void Main(string[] args) { const int n = 5; Point[] mas = new Point[n]; mas[0] = new Point(1, 5); mas[1] = new ColoredPoint(5, 10, "green"); mas[2] = new Line(2, 2, 4, 4); mas[3] = new ColoredLine(2, 2, 4, 4, "red"); mas[4] = new PolyLine(1, 1, 2, 2, 1.5, 1.5); foreach (Point elem in mas) elem.Data(); Console.WriteLine(); Console.WriteLine(); Console.WriteLine("Вносятся изменения:\nМасштабирование четырехугольника 4:1\nИзменение координат точек и линий\nИзменение цветов линий и точек\nПоворот линии на 90 градусов"); foreach (Point elem in mas) elem.ChangeCo(); Console.WriteLine(); foreach (Point elem in mas) elem.Data(); Console.WriteLine(); Console.Write("Press ENTER to exit..."); Console.Read(); } } }
Решение задачи: «Реализовать интерфейс IComparable и перегрузить операции отношения для реализации семантики»
textual
Листинг программы
class Point : IComparable<Point> { .... public int CompareTo(Point other) { var d1 = x * x + y * y; var d2 = other.x * other.x + other.y * other.y; return d1.CompareTo(d2); } public static bool operator >(Point p1, Point p2) { return p1.CompareTo(p2) > 0; } public static bool operator <(Point p1, Point p2) { return p1.CompareTo(p2) < 0; } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д