Реализовать интерфейс 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;
        }
    }

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

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