Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
0 / 0 / 0
Регистрация: 13.03.2016
Сообщений: 19
1

Из заданного множества точек на плоскости выбрать две различные точки

27.03.2016, 02:52. Просмотров 1281. Ответов 8
Метки нет (Все метки)

Из заданного множества точек на плоскости выбрать две различные точки так, что бы количества точек, лежащих по разные стороны прямой, проходящей через эти две точки, различались наименьшим образом. Не пойму как написать программу по задаче.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.03.2016, 02:52
Ответы с готовыми решениями:

Из заданного множества точек на плоскости выбрать две различные точки так
Из заданного множества точек на плоскости выбрать две различные точки так, чтобы количество точек,...

Из заданного множества точек на плоскости выбрать две различные точки
Привет всем пожалуста помогите найти ошибку в коде. условия задачи: Из задоного множества точек на...

Из заданного на плоскости множества точек выбрать три различные точки
Здравствуйте, помогите пожалуйста написать программу: Из заданного на плоскости множества точек...

Выбрать три различные точки из заданного множества точек на плоскости
Выбрать три различные точки из заданного множества точек на плоскости так, чтобы разность между...

8
215 / 63 / 25
Регистрация: 30.04.2013
Сообщений: 866
Записей в блоге: 10
27.03.2016, 07:07 2
1. Выбираете две точки
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
class Point {
public:
  double x;
  double y;
 
public:
  friend bool operator< (Point &_lhs, Point &_rhs);
};
 
friend bool operator< (Point &_lhs, Point &_rhs) {
  return _lhs.x == _lhr.x ? _lhs.y < _lhr.y : _lhs.x < _lhr.x;
}
 
int main(int argc, char **argv) {
  std::set<Point>:: A;
  // ..
 
  std::set<Point>::iterator i;
  std::set<Point>::iterator j;
  std::set<Point>::iterator k;
 
  for (i = A.begin(); i != A.end(); i++) {
    for (j = A.begin(); j != A.end(); j++) {
      // (i, j)  - two "pointers" to Point's
      Point v;
      v.x = (i->y - j->y)
      v.y = (j->x - i->x);
      
      for (j = A.begin(); j != A.end(); j++) {
        if (v.x * j->x + v.y * j->y < 0) {
          // one side
        } else if (v.x * j->x + v.y * j->y > 0) {
          // another side
        } else {
          // the line
        }
      }
    }
  }
  return 0;
}
0
0 / 0 / 0
Регистрация: 13.03.2016
Сообщений: 19
27.03.2016, 13:41  [ТС] 3
Qazan, спасибо, но у меня выдаёт ошибку
0
Миниатюры
Из заданного множества точек на плоскости выбрать две различные точки  
215 / 63 / 25
Регистрация: 30.04.2013
Сообщений: 866
Записей в блоге: 10
27.03.2016, 15:05 4
Кирилл2738,

_lhr was not declared in this scope


Исправьте на _rhs, тобишь на то , что в параметрах.
Здесь мы проверяем меньше ли левый аргумент, чем правый
0
0 / 0 / 0
Регистрация: 13.03.2016
Сообщений: 19
27.03.2016, 19:16  [ТС] 5
Qazan, А можно ли текс программы упростить?
0
1462 / 1170 / 551
Регистрация: 08.01.2012
Сообщений: 4,510
27.03.2016, 19:43 6
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
struct dot{ int x,y; };
int func(dot d1,dot d2,dot d3)
{
    return (d2.x-d1.x)*(d3.y-d1.y)-(d3.x-d1.x)*(d2.y-d1.y);
}
void main()
{
    int n;
    cout<<"N:";
    cin>>n;
    dot *d=new dot[n];
    srand((unsigned)time(0));
    for(int i=0; i<n; i++)
    {
        d[i].x=rand()%21-10;
        d[i].y=rand()%21-10;
        printf("d[%d]:%3d %3d\n",i,d[i].x,d[i].y);
    }
    int i1=0, i2=1, min=n-2;
    for(int i=0; i<n-1; i++)
    for(int j=i+1; j<n; j++)
    {
        int sum=0;
        for(int k=0; k<n; k++)
        if(k!=i && k!=j)
        {
            if(int f=func(d[i],d[j],d[k]))
                sum+=(f<0)?-1:1;
        }
        if(abs(sum)<min)
        {
            min=abs(sum);
            i1=i;
            i2=j;
        }
    }
    printf("d[%d] d[%d]\n",i1,i2);
0
0 / 0 / 0
Регистрация: 13.03.2016
Сообщений: 19
28.03.2016, 14:18  [ТС] 7
MansMI, огромное спасибо. В этой программе точки подбираются рандомно, мне остаётся написать ввод точек вручную.
0
0 / 0 / 0
Регистрация: 13.03.2016
Сообщений: 19
06.04.2016, 12:20  [ТС] 8
MansMI, в программе всегда выводит первую точку и вторую находит рандомно, программа правильно работает?
0
1462 / 1170 / 551
Регистрация: 08.01.2012
Сообщений: 4,510
06.04.2016, 12:32 9
rand()%21-10 тетрадного листа достаточно чтоб проверить
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.04.2016, 12:32

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Из заданного на плоскости множества точек выбрать три различные точки
Само задание звучит так: &quot;Из заданного на плоскости множества точек выбрать три различные точки...

Работа С Массивами (Выбрать три различные точки из заданного множества точек на плоскости так...)
Задание: Выбрать три различные точки из заданного множества точек на плоскости так, чтобы была...

Из заданного множества точек на плоскости выбрать три разные точки A, B, C
Из заданного множества точек на плоскости выбрать три разные точки A, B, C, так, чтобы внутри...

Определить радиус и центр окружности минимального радиуса, проходящей хотя бы через три различные точки заданного множества точек на плоскости
Определить радиус и центр окружности минимального радиуса, проходящей хотя бы через три различные...


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

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

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