Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.94/18: Рейтинг темы: голосов - 18, средняя оценка - 4.94
 Аватар для Leonman
15 / 15 / 4
Регистрация: 17.06.2012
Сообщений: 274

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

16.08.2012, 14:25. Показов 3530. Ответов 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 в обоих случаях?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
16.08.2012, 14:25
Ответы с готовыми решениями:

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

Найти номера наиболее и наименее удаленных друг от друга точек
Добрый день. Задача: Сгенерировать массив с четным количеством 2N случайных целых элементов. В нем будут координаты N точек плоскости....

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

5
 Аватар для Intel~lect
137 / 126 / 14
Регистрация: 03.07.2012
Сообщений: 355
16.08.2012, 14:43
Цитата Сообщение от 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
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
16.08.2012, 15:35
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  [ТС]
Intel~lect, Вы бы не могли написать, как модно исправить эту проблему?

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

Не по теме:

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

0
 Аватар для Leonman
15 / 15 / 4
Регистрация: 17.06.2012
Сообщений: 274
16.08.2012, 23:20  [ТС]
Intel~lect, Вот и я уже не один час мучаюсь, но всё равно спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
16.08.2012, 23:20
Помогаю со студенческими работами здесь

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

Найти номера двух наиболее удаленных точек
Помогите решить данную задачу: Даны значения двух вещественных массива x и y размером n. Рассматривая пары значений (x1:y1),...(xn;yn) как...

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

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

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


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru