Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Leonman
15 / 15 / 4
Регистрация: 17.06.2012
Сообщений: 274
#1

Задан массив точек. Найти номера наиболее и наименее удаленных друг от друга точек. - C++

16.08.2012, 14:25. Просмотров 1438. Ответов 5
Метки нет (Все метки)

Условие задачи: В одномерном массиве с четным количеством элементов (2N) находятся координаты N точек плоскости. Они располагаются в следующем порядке: x1, у1, х2, у2, x3, y3 и т.д. Найти номера наиболее и наименее удаленных друг от друга точек.

Мой код:

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
#include <iostream>
#include <iomanip>
#include <vector>
#include <cmath>
using namespace std;
 
int main()
{ 
   int n;
   float a[n];
   cout << "Введите количество точек:" << endl;
   cin >> n;
    cout << "Введите координаты точек:" << endl;
   for (int i = 0; i < n*2; i++)
    cin >> a[i];
   system("CLS");
   vector<float> b;
   vector<int> d;
   vector<int> e;
   vector<int> dotmin1;
   vector<int> dotmax1;
   vector<int> dotmin2;
   vector<int> dotmax2;
   for (int i = 0; i < n; i++)
    cout << "X: " << a[2*i] << " " << setw(7) << "Y: " << a[2*i+1] << endl; 
   for (int i = 0; i < n; i++)  
    for (int j = i+1; j < n; j++)  
    { 
     b.push_back(sqrt((a[2*j] - a[2*i]) * (a[2*j] - a[2*i]) + (a[2*j+1] - a[2*i+1]) * (a[2*j+1] - a[2*i+1]))); 
     d.push_back(i+1);
     e.push_back(j+1);
    }
   for (int i = 0; i < b.size(); i++)
    cout << b[i] << " ";
    cout << endl;
   for (int i = 0; i < d.size(); i++)
    cout << d[i] << " ";
    cout << endl;
   for (int i = 0; i < e.size(); i++)
    cout << e[i] << " ";
    cout << endl;
   float min = b[0]; 
   for (int i = 0; i < b.size(); i++)
    if (min >= b[i])
    { 
     min = b[i]; 
     dotmin1.push_back(d[i]);
     dotmin2.push_back(e[i]);
    }
    cout << "MIN: " << min << endl;
   for (int i = 0; i < dotmin1.size(); i++)
     cout << dotmin1[i] << " и " << dotmin2[i] << endl;   
   float max = b[0]; 
   for (int i = 0; i < b.size(); i++)
    if (max <= b[i])
    {
     max = b[i];  
     dotmax1.push_back(d[i]);
     dotmax2.push_back(e[i]);
    }
    cout << "MAX: " << max << endl;  
   for (int i = 0; i < dotmax1.size(); i++) 
     cout << dotmax1[i] << " и " << dotmax2[i] << endl;
   
system("PAUSE >> null");    
}
Для тестирования используйте точки: -2,1; 1,2; 0,0; 4,-3;
Точки записывать в командную строку так, как они написаны здесь.
Правильный ответ: для минимального расстояния точки 1 и 3; 2 и 3
Правильный ответ: для максимального расстояния точки 1 и 4

У меня на выходе:
для минимального расстояния точки 1 и 2; 1 и 3; 2 и 3
для максимального расстояния точки 1 и 2; 1 и 4

Откуда берутся точки 1 и 2 в обоих случаях?
http://www.cyberforum.ru/cpp-beginners/thread636270.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.08.2012, 14:25
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Задан массив точек. Найти номера наиболее и наименее удаленных друг от друга точек. (C++):

найти две наиболее удаленных друг от друга точки (множество точек задано на плоскости)
Помогите, пожалуйста, написать программу на С++, используя структуру point для...

В заданном множестве точек найти три пары самых удаленных друг от друга точек
Координаты точки на площади задаются парой действительных чисел. Дано...

Найти номера двух наиболее удаленных точек
Помогите решить данную задачу: Даны значения двух вещественных массива x и y...

Динамическая матрица (Найти координаты двух точек, наиболее удалённых друг от друга)
Дана динамическая матрица размера N*2 (N вводится). Каждая строка матрицы...

Разработать программу для нахождения пары самых удаленных друг от друга точек
N точек на плоскости заданы своими координатами, значения которых формируются...

5
Intel~lect
135 / 124 / 14
Регистрация: 03.07.2012
Сообщений: 355
16.08.2012, 14:43 #2
Цитата Сообщение от Leonman Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
float min = b[0]; 
 for (int i = 0; i < b.size(); i++)
 if (min >= b[i])  // При i = 0 условие всегда истинно. Потому что в этом случае min равно b[0]
 { 
 min = b[i]; 
 dotmin1.push_back(d[i]);
 dotmin2.push_back(e[i]);
 }
То же самое и при нахождении максимального
0
-=ЮрА=-
Заблокирован
Автор FAQ
16.08.2012, 15:35 #3
Leonman, вот так думаю будет норм
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
#include <cmath>
#include <vector>
#include <string>
#include <utility>
#include <sstream>
#include <iostream>
using namespace std;
 
string data = "5.4 12.3 0 -5 14 16.9 23 11 -8 25.1"; 
double getLen(
                pair<double, double> pBeg, 
                pair<double, double> pEnd
             );
 
int main()
{
    double x, y;
    vector<pair<double, double> > vec;
    vector<pair<double, double> >::iterator i;
    vector<pair<double, double> >::iterator j;
     
    stringstream ss(data);
    while(!ss.eof())
    {
        if(ss>>x>>y)
            vec.push_back(make_pair(x,y));
    }
 
    vector<pair<double, double> >::iterator imin;imin = vec.begin();
    vector<pair<double, double> >::iterator jmin;jmin = vec.end() - 1;
    vector<pair<double, double> >::iterator imax;imax = vec.begin();
    vector<pair<double, double> >::iterator jmax;jmax = vec.end() - 1;
    for(i = vec.begin(); i < vec.end(); i++)
    for(j = vec.begin(); j < vec.end(); j++)
    {
        if(i != j)
        {
            //Èùåì ìèГ*ГЁГ¬Г*ëüГ*Г® ГіГ¤Г*ë¸Г*Г*ûå òî÷êè
            if(getLen(*i, *j) < getLen(*imin, *jmin))
            {
                imin = i;
                jmin = j;
            }
            //Èùåì Г¬Г*ГЄГ±ГЁГ¬Г*ëüГ*Г® ГіГ¤Г*ë¸Г*Г*ûå òî÷êè
            if(getLen(*imax, *jmax) < getLen(*i, *j))
            {
                imax = i;
                jmax = j;
            }
        }
    }
    cout<<"\tPAIR OF POINTS:\n";
    cout<<"with min Length : "
        <<"("<<(*imin).first<<";"<<(*imin).second<<")"
        <<" - "
        <<"("<<(*jmin).first<<";"<<(*jmin).second<<")"
        <<"\nminLength : "
        <<getLen(*imin, *jmin)<<endl;
    cout<<"with max Length : "
        <<"("<<(*imax).first<<";"<<(*imax).second<<")"
        <<" - "
        <<"("<<(*jmax).first<<";"<<(*jmax).second<<")"
        <<"\nmaxLength :  "
        <<getLen(*imax, *jmax)<<endl;
    return 0;
}
 
double getLen(
                pair<double, double> pBeg, 
                pair<double, double> pEnd
             )
{
    return sqrt
        (
            pow(pEnd.first - pBeg.first,2.0) 
            + 
            pow(pEnd.second - pBeg.second,2.0)
        );
}
Проверка : http://codepad.org/dnc0fPT9
0
Миниатюры
Задан массив точек. Найти номера наиболее и наименее удаленных друг от друга точек.  
Leonman
15 / 15 / 4
Регистрация: 17.06.2012
Сообщений: 274
16.08.2012, 21:39  [ТС] #4
Intel~lect, Вы бы не могли написать, как модно исправить эту проблему?

Добавлено через 48 секунд
-=ЮрА=-, Спасибо за код, но мне всё-таки важно понять, как надо исправить мой.
0
Intel~lect
16.08.2012, 22:22
  #5

Не по теме:

Leonman, Извините, но у меня сейчас голова вообще не работает. Я вот ошибку нашел, а как ее исправить не могу понять.

0
Leonman
15 / 15 / 4
Регистрация: 17.06.2012
Сообщений: 274
16.08.2012, 23:20  [ТС] #6
Intel~lect, Вот и я уже не один час мучаюсь, но всё равно спасибо.
0
16.08.2012, 23:20
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.08.2012, 23:20
Привет! Вот еще темы с решениями:

Разработать программу для нахождения пары самых удаленных друг от друга точек
N точек на плоскости заданы своими координатами, значения которых формируются...

Найти две наиболее удаленных друг от друга точки
Структуры: I. Решить задачу, используя структуру point для хранения координат...

Найти наиболее и наименее удаленные точки. Вычисление расстояния между парой точек оформить функцией
Даны координаты N точек на плоскости в виде маccивов X и Y. Найти наиболее и...

Найти наименее удаленные друг от друга точки на плоскости
Приветствую ребята! Нужна помощь, помогите решить задачу на С++, Заранее...


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

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

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