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

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

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

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

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

Для решения есть класс Point:
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. namespace Планиметрия
  5. {
  6. class Point:Figure
  7. {
  8. // Конструкторы:
  9. public Point()
  10. {
  11. Console.WriteLine("Работает конструктор класса Point без параметров");
  12. reality=true;
  13. FigureSizes= new double [2];
  14. FigureSizes[0]=0;
  15. FigureSizes[1]=0;
  16. }
  17. public Point(Point Ob)
  18. {
  19. Console.WriteLine("Работает конструктор-копировщик класса Point ");
  20. reality = true;
  21. FigureSizes = new double[2];
  22. FigureSizes[0] = Ob.FigureSizes[0];
  23. FigureSizes[1] = Ob.FigureSizes[1];
  24. }
  25. public Point(double x, double y)
  26. {
  27. Console.WriteLine("Работает конструктор класса Point с 2-мя параметрами");
  28. reality = true;
  29. FigureSizes = new double[2];
  30. FigureSizes[0] = x;
  31. FigureSizes[1] = y;
  32. }
  33. // Свойства:
  34. public double koord_x
  35. {
  36. get
  37. {
  38. return FigureSizes[0];
  39. }
  40. set
  41. {
  42. FigureSizes[0] = value;
  43. }
  44. }
  45. public double koord_y
  46. {
  47. get
  48. {
  49. return FigureSizes[1];
  50. }
  51. set
  52. {
  53. FigureSizes[1] = value;
  54. }
  55. }
  56. public void show()
  57. {
  58. Console.WriteLine("x = {0:0.##} ,y = {1:0.##}",
  59. FigureSizes[0], FigureSizes[1]);
  60. }
  61.  
  62. public static Point operator +(Point T1, Point T2)
  63. {
  64. Point Trez = new Point(T1.koord_x+T2.koord_x, T1.koord_y+T2.koord_y);
  65. return Trez;
  66. }
  67. public static Point operator -(Point T1, Point T2)
  68. {
  69. Point Trez = new Point(T1.koord_x - T2.koord_x, T1.koord_y -T2.koord_y);
  70. return Trez;
  71. }
  72. public static bool operator == (Point T1, Point T2)
  73. {
  74. if ((T1.koord_x == T2.koord_x) && (T1.koord_y == T2.koord_y))
  75. {
  76. return true;
  77. }
  78. else return false;
  79. }
  80. public static bool operator != (Point T1, Point T2)
  81. {
  82. if ((T1.koord_x != T2.koord_x) || (T1.koord_y != T2.koord_y))
  83. {
  84. return true;
  85. }
  86. else return false;
  87. }
  88. public override bool Equals(object obj)
  89. {
  90. if (obj ==null || !(obj is Point))
  91. return false;
  92. else
  93. return this==(Point) obj;
  94. }
  95.  
  96. public override int GetHashCode()
  97. {
  98. return ToString().GetHashCode();
  99. }
  100. public void Input_Point()
  101. {
  102. Console.WriteLine("Введите координаты точки: ");
  103. FigureSizes[0] = Double.Parse(Console.ReadLine());
  104. FigureSizes[1] = Double.Parse(Console.ReadLine());
  105. }
  106. public double Get_x()
  107. {
  108. return FigureSizes[0];
  109. }
  110. public double Get_y()
  111. {
  112. return FigureSizes[1];
  113. }
  114. public void Set_x(double a)
  115. {
  116. FigureSizes[0] = a;
  117. }
  118. public void Set_y(double a)
  119. {
  120. FigureSizes[1] = a;
  121. }
  122. public bool Rawni_li(Point Ob)
  123. {
  124. return FigureSizes[0] == Ob.FigureSizes[0] && FigureSizes[1] == Ob.FigureSizes[1];
  125. }
  126. public void Copy(Point Ob)
  127. {
  128. FigureSizes[0] = Ob.FigureSizes[0];
  129. FigureSizes[1] = Ob.FigureSizes[1];
  130. }
  131. public void Get_x_y(ref double x, ref double y)
  132. {
  133. FigureSizes[0] = this.FigureSizes[0];
  134. FigureSizes[1] = this.FigureSizes[1];
  135. }
  136. public void Swap(ref Point Ob1, ref Point Ob2)
  137. {
  138. Point T = Ob1;
  139. Ob1 = Ob2;
  140. Ob2 = T;
  141. }
  142. public Point Uwelich_tchk(int koef)
  143. {
  144. return new Point(FigureSizes[0] * koef, FigureSizes[1] * koef);
  145. }
  146. public static Point operator +(Point Ob, int z)
  147. {
  148. return new Point(Ob.FigureSizes[0] + z, Ob.FigureSizes[1] + z);
  149. }
  150. public static Point operator +(int z, Point Ob)
  151. {
  152. return new Point(Ob.FigureSizes[0] + z, Ob.FigureSizes[1] + z);
  153. }
  154. public static Point operator -(Point Ob)
  155. {
  156. return new Point(-Ob.FigureSizes[0], -Ob.FigureSizes[1]);
  157. }
  158. public static Point operator ++(Point Ob)
  159. {
  160. Ob.FigureSizes[0]++;
  161. Ob.FigureSizes[1]++;
  162. return Ob;
  163. }
  164. public static Point operator --(Point Ob)
  165. {
  166. Ob.FigureSizes[0]--;
  167. Ob.FigureSizes[1]--;
  168. return Ob;
  169. }
  170. public static bool operator <(Point T1, Point T2)
  171. {
  172. double d1 = Math.Sqrt(T1.FigureSizes[0] * T1.FigureSizes[0] + T1.FigureSizes[1] * T1.FigureSizes[1]);
  173. double d2 = Math.Sqrt(T2.FigureSizes[0] * T2.FigureSizes[0] + T2.FigureSizes[1] * T2.FigureSizes[1]);
  174. if (d1 < d2)
  175. return true;
  176. else return false;
  177. }
  178. public static bool operator >(Point T1, Point T2)
  179. {
  180. double d1 = Math.Sqrt(T1.FigureSizes[0] * T1.FigureSizes[0] + T1.FigureSizes[1] * T1.FigureSizes[1]);
  181. double d2 = Math.Sqrt(T2.FigureSizes[0] * T2.FigureSizes[0] + T2.FigureSizes[1] * T2.FigureSizes[1]);
  182. if (d1 > d2)
  183. return true;
  184. else return false;
  185. }
  186. }
  187. }
А основной части создал массив для ввода точек:
Листинг программы
  1. int i, n;
  2. Console.WriteLine("Введите количество точек: ");
  3. n = Int32.Parse(Console.ReadLine());
  4. Point[] mas = new Point[n];
  5. for (i = 0; i < n; i++)
  6. {
  7. mas[i] = new Point();
  8. mas[i].Input_Point();
  9. }
  10. Console.WriteLine("Содержимое массива точек: ");
  11. for (i = 0; i < n; i++)
  12. {
  13. mas[i].show();
  14. }
Но не могу понять, как их правильно проверять ? Т.е. как сравнивать две точки из этого массива для нахождения симметричных ? У нас есть методы Get_x() и Get_y(), но не совсем понимаю, как с ними работать

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

textual
Листинг программы
  1. using System;
  2. using System.Linq;
  3. using System.Collections.Generic;
  4.  
  5. class Program
  6. {
  7.     private static Random rnd = new Random();
  8.  
  9.     public static void Main()
  10.     {
  11.         HashSet<Tuple<int, int>> points = new HashSet<Tuple<int, int>>();
  12.         while (points.Count != 100)
  13.         {
  14.             points.Add(Tuple.Create(rnd.Next(-10, 11), rnd.Next(-10, 11)));
  15.         }
  16.         List<Tuple<int, int>> mirrored = points.Where(p => p.Item2 != 0 && points.Contains(Tuple.Create(p.Item1, -p.Item2))).ToList();
  17.         mirrored.ForEach(Console.WriteLine);
  18.         Console.WriteLine();
  19.         Console.WriteLine(mirrored.OrderByDescending(p => p.Item2).FirstOrDefault());
  20.     }
  21. }

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


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

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

13   голосов , оценка 4.077 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы