Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Алексей199
1 / 1 / 1
Регистрация: 03.04.2013
Сообщений: 14
#1

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

03.04.2013, 12:33. Просмотров 319. Ответов 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
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.04.2013, 12:33
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Из задоного множества точек на плоскости выбрать две различные точки (C++):

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

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

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

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

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

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

2
lemegeton
2925 / 1354 / 135
Регистрация: 29.11.2010
Сообщений: 2,725
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
salam
171 / 152 / 16
Регистрация: 10.07.2012
Сообщений: 750
03.04.2013, 17:52 #3
Алексей199, опишите ваш алгоритм.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.04.2013, 17:52
Привет! Вот еще темы с ответами:

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

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

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

Выбрать три разные точки заданного на плоскости множества точек, составляющие треугольник наибольшего периметра - C++
Задание, как множество точек вывести на экран понял. #include &lt;iostream&gt; #include &lt;time.h&gt; #define _CRT_SECURE_NO_DEPRECATE 0 using...


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

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

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