Среди всех точек этого множества найти пару симметричных относительно оси ОХ точек - C#
Формулировка задачи:
Доброго вечер.
Помогите, пожалуйста, с задачей:
А основной части создал массив для ввода точек:
Но не могу понять, как их правильно проверять ? Т.е. как сравнивать две точки из этого массива для нахождения симметричных ? У нас есть методы Get_x() и Get_y(), но не совсем понимаю, как с ними работать
Дано множество 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();
- }
Решение задачи: «Среди всех точек этого множества найти пару симметричных относительно оси ОХ точек»
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());
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д