Реализовать интерфейс 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;
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д