Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
Алексей199
1 / 1 / 1
Регистрация: 03.04.2013
Сообщений: 14
03.04.2013, 12:33     Из задоного множества точек на плоскости выбрать две различные точки #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
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");
}
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.04.2013, 12:33     Из задоного множества точек на плоскости выбрать две различные точки
Посмотрите здесь:

C++ Выбрать 3 разные точки заданного на плоскости множества точек,составляющие треугольник наибольшего периметра
C++ Выбрать четыре различные точки первого множества по правилу
Написать программу, определяющую радиус и центр окружности, проходящей по крайней мере через три различные точки заданного множества точек C++
C++ Из заданного на плоскости множества точек выбрать такие три, которые составляют треугольник наибольшего периметра.
C++ Из заданного на плоскости множества точек выбрать три различные точки
C++ Написать программу, определяющую радиус и центр окружности, проходящей по крайней мере через три различные точки заданного множества точек
Из множества точек выбрать две точки по определенному условию C++
C++ Из заданного множества точек на плоскости выбрать две различные точки

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
lemegeton
 Аватар для lemegeton
2910 / 1339 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
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;
}
salam
157 / 138 / 11
Регистрация: 10.07.2012
Сообщений: 709
03.04.2013, 17:52     Из задоного множества точек на плоскости выбрать две различные точки #3
Алексей199, опишите ваш алгоритм.
Yandex
Объявления
03.04.2013, 17:52     Из задоного множества точек на плоскости выбрать две различные точки
Ответ Создать тему
Опции темы

Текущее время: 18:20. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru