Среди всех точек этого множества найти пару симметричных относительно оси ОХ точек - C#

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

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

Доброго вечер. Помогите, пожалуйста, с задачей:

Дано множество A из N точек на плоскости. Среди всех точек этого множества найти пару симметричных относительно оси ОХ точек с максимальным расстоянием между ними (вывести их номера и значения). Если таких точек нет, то вывести соответствующее сообщение.

Для решения есть класс Point:
using System;
using System.Collections.Generic;
using System.Text;
 
namespace Планиметрия
{
    class Point:Figure
    {
        // Конструкторы:
        public Point()
            {
                Console.WriteLine("Работает  конструктор класса Point без параметров");
                reality=true;
                FigureSizes= new double [2];
                FigureSizes[0]=0;
                FigureSizes[1]=0;
            }
        
            public Point(Point Ob)
            {
                Console.WriteLine("Работает  конструктор-копировщик класса Point ");
                reality = true;
            FigureSizes = new double[2];
            FigureSizes[0] = Ob.FigureSizes[0];
            FigureSizes[1] = Ob.FigureSizes[1];
        }
                
        public Point(double x, double y)
        {
            Console.WriteLine("Работает  конструктор класса Point  с 2-мя параметрами");
            reality = true;
            FigureSizes = new double[2];
            FigureSizes[0] = x;
            FigureSizes[1] = y;
 
        }
 
        //  Свойства:
              
        public double koord_x
        {
            get
            {
                return FigureSizes[0];
            }
            set
            {
                FigureSizes[0] = value;
            }
        }
        public double koord_y
        {
            get
            {
                return FigureSizes[1];
            }
            set
            {
                FigureSizes[1] = value;
            }
        }
        public void show()
        {
            Console.WriteLine("x = {0:0.##} ,y = {1:0.##}",
                FigureSizes[0], FigureSizes[1]);
 
        }

        public static Point operator +(Point T1, Point T2)
        {
            Point Trez = new Point(T1.koord_x+T2.koord_x, T1.koord_y+T2.koord_y);
            return Trez;
        }
        public static Point operator -(Point T1, Point T2)
        {
            Point Trez = new Point(T1.koord_x - T2.koord_x, T1.koord_y -T2.koord_y);
            return Trez;
        }
         
        public static bool operator == (Point T1, Point T2)
        {
            if ((T1.koord_x == T2.koord_x) && (T1.koord_y == T2.koord_y))
            {
                return true;
            }
            else return false;
        }
        
        public static bool operator != (Point T1, Point T2)
        {
            if ((T1.koord_x != T2.koord_x) || (T1.koord_y != T2.koord_y))
            {
                return true;
            }
            else return false;
        }
                        
        public override bool Equals(object obj)
        {
            if (obj ==null || !(obj is Point))
                return false;
            else 
            return this==(Point) obj;
        }

        public override int GetHashCode()
        {
            return ToString().GetHashCode();
        }
        public void Input_Point()
        {
            Console.WriteLine("Введите координаты точки: ");
            FigureSizes[0] = Double.Parse(Console.ReadLine());
            FigureSizes[1] = Double.Parse(Console.ReadLine());
        }
        public double Get_x()
        {
            return FigureSizes[0];
        }
        public double Get_y()
        {
            return FigureSizes[1];
        }
        public void Set_x(double a)
        {
            FigureSizes[0] = a;
        }
        public void Set_y(double a)
        {
            FigureSizes[1] = a;
        }
        public bool Rawni_li(Point Ob)
        {
            return FigureSizes[0] == Ob.FigureSizes[0] && FigureSizes[1] == Ob.FigureSizes[1];
        }
        public void Copy(Point Ob)
        {
            FigureSizes[0] = Ob.FigureSizes[0];
            FigureSizes[1] = Ob.FigureSizes[1];
        }
        public void Get_x_y(ref double x, ref double y)
        {
            FigureSizes[0] = this.FigureSizes[0];
            FigureSizes[1] = this.FigureSizes[1];
        }
 
        public void Swap(ref Point Ob1, ref Point Ob2)
        {
            Point T = Ob1;
            Ob1 = Ob2;
            Ob2 = T;
        }
 
       public Point Uwelich_tchk(int koef)
        {
            return new Point(FigureSizes[0] * koef, FigureSizes[1] * koef);
        }
        public static Point operator +(Point Ob, int z)
        {
            return new Point(Ob.FigureSizes[0] + z, Ob.FigureSizes[1] + z);
        }
        public static Point operator +(int z, Point Ob)
        {
            return new Point(Ob.FigureSizes[0] + z, Ob.FigureSizes[1] + z);
        }
        public static Point operator -(Point Ob)
        {
            return new Point(-Ob.FigureSizes[0], -Ob.FigureSizes[1]);
        }
        public static Point operator ++(Point Ob)
        {
            Ob.FigureSizes[0]++;
            Ob.FigureSizes[1]++;
            return Ob;
        }
        public static Point operator --(Point Ob)
        {
            Ob.FigureSizes[0]--;
            Ob.FigureSizes[1]--;
            return Ob;
        }
        public static bool operator <(Point T1, Point T2)
        {
            double d1 = Math.Sqrt(T1.FigureSizes[0] * T1.FigureSizes[0] + T1.FigureSizes[1] * T1.FigureSizes[1]);
            double d2 = Math.Sqrt(T2.FigureSizes[0] * T2.FigureSizes[0] + T2.FigureSizes[1] * T2.FigureSizes[1]);
            if (d1 < d2)
                return true;
            else return false;
        }
        public static bool operator >(Point T1, Point T2)
        {
            double d1 = Math.Sqrt(T1.FigureSizes[0] * T1.FigureSizes[0] + T1.FigureSizes[1] * T1.FigureSizes[1]);
            double d2 = Math.Sqrt(T2.FigureSizes[0] * T2.FigureSizes[0] + T2.FigureSizes[1] * T2.FigureSizes[1]);
            if (d1 > d2)
                return true;
            else return false;
        }
    }
    
}
А основной части создал массив для ввода точек:
int i, n;
            Console.WriteLine("Введите количество точек: ");
            n = Int32.Parse(Console.ReadLine());
            Point[] mas = new Point[n];
            for (i = 0; i < n; i++) 
            {
                mas[i] = new Point();
                mas[i].Input_Point();
            }
            Console.WriteLine("Содержимое массива точек: ");
            for (i = 0; i < n; i++)
            {
                mas[i].show();
            }
Но не могу понять, как их правильно проверять ? Т.е. как сравнивать две точки из этого массива для нахождения симметричных ? У нас есть методы Get_x() и Get_y(), но не совсем понимаю, как с ними работать

Решение задачи: «Среди всех точек этого множества найти пару симметричных относительно оси ОХ точек»

textual
Листинг программы
using System;
using System.Linq;
using System.Collections.Generic;
 
class Program
{
    private static Random rnd = new Random();
 
    public static void Main()
    {
        HashSet<Tuple<int, int>> points = new HashSet<Tuple<int, int>>();
        while (points.Count != 100)
        {
            points.Add(Tuple.Create(rnd.Next(-10, 11), rnd.Next(-10, 11)));
        }
        List<Tuple<int, int>> mirrored = points.Where(p => p.Item2 != 0 && points.Contains(Tuple.Create(p.Item1, -p.Item2))).ToList();
        mirrored.ForEach(Console.WriteLine);
        Console.WriteLine();
        Console.WriteLine(mirrored.OrderByDescending(p => p.Item2).FirstOrDefault());
    }
}

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


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

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

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