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

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

03.04.2013, 12:33. Просмотров 636. Ответов 2
Метки нет (Все метки)

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

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
#include <iostream>
 
#define nmax 15
 
struct point
{
float x, y;
};
 
bool prin(point t1, point t2, float r)
{
return std::pow(t1.x - t2.x, 2) + std::pow(t1.y- t2.y, 2) <= r * r;
}
 
char count(point t, point *a, char n, float r)
{
char i, k = 0;
 
for (int i = 1; i <= n; i++)
if (prin(t, a[i], r))
k++;
 
return k;
}
 
int main()
{
point t[nmax];
char n, i, j, t1, t2;
float r;
bool f;
 
do
{
std::cout « "Kolichestvo tochek ot 3 do " « nmax « " n = ";
std::cin » n;
} while ((n < 3) && (n > nmax));
 
std::cout « "Vvedite koordinati tochek";
 
for (int i = 1; i <= n; i++)
{
std::cout « "Tochka " « i « std::endl;
std::cout « "x = ";
std::cin » t[i].x;
std::cout « "y = ";
std::cin » t[i].y;
 
}
 
std::cout « "Koordinati: " « std::endl;
std::cout « "N";
 
for (int i = 1; i <= n; i++)
std::cout « i « std::endl;
 
std::cout « std::endl « "X";
 
for (int i = 1; i <= n; i++)
std::cout « t[i].x;
 
std::cout « std::endl « "Y";
 
for (int i = 1; i <= n; i++)
std::cout « t[i].y;
 
std::cout « std::endl « std::endl;
 
do
{
std::cout « "Vvedite radius > 0 r = ";
std::cin » r;
} while (r <= 0);
 
i = 1;
f = false;
 
while ((i < n) && (!f))
{
j = i + 1;
while ((j <= n) && (!f))
if (count(t[i], t, n, r) == count(t[j], t, n, r))
{
f = true;
t1 = i;
t2 = j;
}
else
j++;
if (!f)
i++;
}
 
if (!f)
std::cout « "Zadannoi pari tochek net";
else
std::cout « "Nomera tochek po usloviu " « t1 « " " « t2;
 
system("pause");
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.04.2013, 12:33
Ответы с готовыми решениями:

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

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

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

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

2
3050 / 1455 / 492
Регистрация: 29.11.2010
Сообщений: 2,888
03.04.2013, 16:19 2
Воспользуйтесь тэгами форматирования кода -- читать невозможно.

Это не будет работать, потому что алгоритм неверен.
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
#include <iostream>
#include <istream>
#include <cmath>
#include <ctime>
#include <cstdlib>
 
struct Point {
  double x, y;
  Point() : x(0), y(0) {}
  Point(double x, double y) : x(x), y(y) {}
};
 
// возвращает расстояние между двумя точками
double getDistance(const Point &a, const Point &b) {
  return sqrt(pow(a.x - b.x, 2.0) + pow(a.y - b.y, 2.0));
};
 
// возвращает расстояние между двумя точками по
// индексами матрице расстояний
double getDistance(int a, int b, int size, double **distances) {
  if (a == b) {
    return 0.0;
  }
  if (a < b) {
    double c = a;
    a = b;
    b = c;
  }
  return distances[a][b];
};
 
double **formDistanceMatrix(Point *points, int numberOfPoints) {
  double **result = new double*[numberOfPoints];
  
  for (int i = 0; i < numberOfPoints; ++i) {
    result[i] = new double[i];
    for (int j = 0; j < i; ++j) {
      result[i][j] = getDistance(points[i], points[j]);
    }
  }
 
  return result;
};
 
void deleteDistanceMatrix(double **matrix, int numberOfPoints) {
  for (int i = 0; i < numberOfPoints; ++i) {
    delete [] matrix[i];
  }
  delete [] matrix;
}
 
int getNumberOfPointsInRadius(int pointId, double radius,
  int numberOfPoints, double **distanceMatrix) {
  int result = 0;
  for (int i = 0; i < numberOfPoints; ++i) {
    if (i != pointId && getDistance(pointId, i, numberOfPoints, 
      distanceMatrix) < radius) {
      ++result;
    }
  }
  return result;
}
  
 
int main(int argc, char *argv[]) {
  srand(time(0));
  
  int numberOfPoints = 5 + rand() % 3;
  Point *points = new Point[numberOfPoints];
  
  for (int i = 0; i < numberOfPoints; ++i) {
    points[i] = Point(rand() % 10, rand() % 10);
    std::cout << "[" << points[i].x << ", " << points[i].y <<
      "]" << std::endl;
  }
  
  double radius = (2 + rand() % 3);
  
  double **distanceMatrix = formDistanceMatrix(points, numberOfPoints);
  
  for (int i = 0; i < numberOfPoints; ++i) {
    std::cout << "Points in radius of " << radius << " around point " <<
      i << ": " << getNumberOfPointsInRadius(i, radius,
      numberOfPoints, distanceMatrix) << std::endl;
  }
  
  for (int i = 0; i < numberOfPoints - 1; ++i) {
    for (int j = i; j < numberOfPoints; ++j) {
      if (i != j && (getNumberOfPointsInRadius(i, radius,
        numberOfPoints, distanceMatrix) == getNumberOfPointsInRadius(j,
        radius, numberOfPoints, distanceMatrix))) {
        std::cout << "Point [" << points[i].x << ", " << points[i].y << 
          "]" << " has same number of points as [" << points[j].x <<
          ", " << points[j].y << "]" << std::endl;
      }
    }
  }
  
  deleteDistanceMatrix(distanceMatrix, numberOfPoints);
  delete [] points;
  
  std::cin.get();
  return 0;
}
1
193 / 173 / 30
Регистрация: 10.07.2012
Сообщений: 799
03.04.2013, 17:52 3
Алексей199, опишите ваш алгоритм.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.04.2013, 17:52

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

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

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

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

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


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

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

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