Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
0 / 0 / 1
Регистрация: 29.10.2015
Сообщений: 216
1

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

16.03.2017, 17:38. Показов 743. Ответов 4
Метки нет (Все метки)

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

Для решения есть класс Point:
Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
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;
        }
    }
    
}


А основной части создал массив для ввода точек:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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(), но не совсем понимаю, как с ними работать
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.03.2017, 17:38
Ответы с готовыми решениями:

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

Найти точку среди всех точек этого множества, лежащих в первой четверти, наиболее близкую к началу координат
помогите решить задачу если можно то скоментариями зарание спасибо. Дано множество A из N точек...

Найти точку среди точек данного множества, лежащих в первой четверти, наиболее близкую к началу координат
Дано множество A из N точек на плоскости. Найти точку (вывести её номер и значение) среди всех...

Можно ли указать пару точек M и N в данном множестве, чтобы прямая MN была перпендикулярна оси OХ?
Дано множество точек на плоскости. Можно ли указать пару точек M и N в этом множестве таких, чтобы...

4
208 / 206 / 137
Регистрация: 21.12.2015
Сообщений: 545
16.03.2017, 17:52 2
Цитата Сообщение от Namatrasnik Посмотреть сообщение
найти пару симметричных относительно оси ОХ точек
симметричные относительно оси абсцисс точки - это точки у которых x координаты равны, а y координаты равны по модулю но отличны по знаку

то есть самый простой алгоритм выглядит так :
C#
1
2
3
4
5
6
foreach(Point a in mas)
    foreach(Point b in mas)
       if(a.Get_x() == b.Get_x() && a.Get_y() == -b.Get_y())
       {
           //действия
       }
0
0 / 0 / 1
Регистрация: 29.10.2015
Сообщений: 216
20.03.2017, 15:51  [ТС] 3
TuM0xA, вот такой способ здесь был более подходящим:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
double r = 0;
            for (i = 0; i < n - 1; i++)
            {
                
                    for (int j = i + 1; j < n; j++)
                    {
                        if (mas[i].koord_x == mas[j].koord_x && mas[i].koord_y == -mas[j].koord_y)
                        {
                            r = Math.Sqrt((Math.Pow((mas[i].koord_x - mas[j].koord_x), 2)) + (Math.Pow((mas[i].koord_y - mas[j].koord_y), 2)));
                            Console.WriteLine("Расстояние между парой точек: " + r);
                        }  
                }
            }
А как теперь из всех введённых точек найти точки с наибольшим расстоянием ?
0
266 / 250 / 186
Регистрация: 28.10.2015
Сообщений: 723
20.03.2017, 16:42 4
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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());
    }
}
0
0 / 0 / 1
Регистрация: 29.10.2015
Сообщений: 216
27.03.2017, 15:43  [ТС] 5
ata, мне не совсем понятен данный способ. Хотелось бы увидеть на примере своего кода
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.03.2017, 15:43

Можно ли указать пару точек M и N в этом множестве таких, чтобы прямая MN была перпендикулярна оси OХ
помогите решить задачу зарание спасибо . Дано множество точек на плоскости. Можно ли указать пару...

Дано множество точек на плоскости. Сколько можно на данном множестве точек построить отрезков, перпендикулярных оси OY
помогите с задачкой Дано множество точек на плоскости. Сколько можно на данном множестве точек...

Дано множество A из N точек на плоскости. Найти точку (вывести её номер и значение) среди всех точек этого множества
Дано множество A из N точек на плоскости. Найти точку (вывести её номер и значение) среди всех...

Среди множества точек на плоскости найдите пару точек с минимальным расстоянием между ними
Среди множества точек на плоскости найдите пару точек с минимальным расстоянием между ними....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.