Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.53/30: Рейтинг темы: голосов - 30, средняя оценка - 4.53
0 / 0 / 0
Регистрация: 21.10.2011
Сообщений: 5

Найти наибольшее расстояние между точками

21.01.2012, 06:47. Показов 5824. Ответов 13
Метки нет (Все метки)

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

Вот, что пока накалякал.

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
#include<stdio.h>
#include<iostream.h>
#include<conio.h>
#include<math.h>
 
float maxspacing (int x, int y, int n1, int i1, int j1, int &rT1, int &rT2)
{
      float space=0, d=0;
      for (i1=0; i1<n1-1; i1++)
      {
          for (j1=i1+1; j1<n1-2; j1++)
          {
              d=sqrt((x[i1]-x[j1])*(x[i1]-x[i1]) + (y[i1]-y[j1])*(y[i1]-y[j1]));
              if (d>space)
              {
                 space=d;
                 rT1=i1;
                 rT2=j1;
              }  
              d=0;
          }
      }
      
      return space;
}
                     
int main()
{
    int i, j, n, t1, t2;
    float sp=0, d=0;  
    int koordx[n];
    int koordy[n];
    
    std::cout << "vvedite kolichestvo tochek: ";
    std::cin >> n;
    std::cout << "\n\n";
    
    for (i=0; i<n; i++)
    {
        j=i+1;
        std::cout << "zadaite koordinatu x " << j << "-i tochki: ";
        std::cin >> koordx[i];
    }
    
    std::cout << "\n\n";
    
    for (i=0; i<n; i++)
    {
        j=i+1;
        std::cout << "zadaite koordinatu y " << j << "-i tochki: ";
        std::cin >> koordy[i];
    }
    
    sp = maxspacing (koordx, koordy, n, i, j, t1, t2);
    
    std::cout << "max rasstoyanie mezhdu tochkami s koordinatami:\n";
    std::cout << "(" << koordx[t1] << "; " << koordy[t1] << ") i (";
    std::cout << koordx[t2] << "; " << koordy[t2] << ")";
    
    system("pause");
}
Пока не получается даже проверить, правильно или неправильно работает программа — потому что не запускается.

Первая ошибка в 13 строке: invalid types `int[int]' for array subscript
Причем повторяет ее компилятор почему-то 8 раз подряд.

Вторая и дальше — 54 строка:

invalid conversion from `int*' to `int'
initializing argument 1 of `float maxspacing(int, int, int, int, int, int&, int&)'
invalid conversion from `int*' to `int'
initializing argument 2 of `float maxspacing(int, int, int, int, int, int&, int&)'


Никак не получается исправить.

И я, похоже, чего-то не понимаю в функциях, раз у меня в скобках такое огромное количество параметров). Или так и должно быть?
Пробовал обойтись без функции, компиляцию проходит, но сразу же зависает.


Помогите, пожалуйста.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
21.01.2012, 06:47
Ответы с готовыми решениями:

Найти наибольшее расстояние между точками
#include &lt;cstdlib&gt; #include &lt;iostream&gt; #include &lt;Math.h&gt; using namespace std; double rast(double x1, double x2, double y1,...

Найти расстояние от начала координат до каждой точки и расстояние между точками
задача на С++ На плоскости заданы точки своими координатами. Найти расстояние от начала координат до каждой точки и расстояние между...

Расстояние между двумя множествами точек - это расстояние между наиболее близко расположенными точками этих
1. Расстояние между двумя множествами точек - это расстояние между наиболее близко расположенными точками этих множеств. Найти расстояние...

13
873 / 771 / 173
Регистрация: 11.01.2012
Сообщений: 1,942
21.01.2012, 07:47
Похоже на ситуацию, когда глухой ведет слепого.
Но все же:
Чуть подрихтовал.......
Твоя программа не знает что выводить.
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
#include<stdio.h>
#include<iostream>
#include<conio.h>
#include<math.h>
 
float maxspacing (int x, int y, int n1, int i1, int j1, int &rT1, int &rT2)
{
      float space=0, d=0;
      for (i1=0; i1<n1-1; i1++)
      {
          for (j1=i1+1; j1<n1-2; j1++)
          {
              d = ((x[&i1]-x[&j1])*(x[&i1]-x[&i1]) + (y[&i1]-y[&j1])*(y[&i1]-y[&j1]))/((x[&i1]-x[&j1])*(x[&i1]-x[&i1]) + (y[&i1]-y[&j1])*(y[&i1]-y[&j1]));
              if (d>space)
              {
                 space=d;
                 rT1=i1;
                 rT2=j1;
              }  
              d=0;
          }
      }
      
      return space;
    
}
                     
int main()
{
    int i, j, n, t1, t2;
    float sp=0, d=0;  
    int koordx[10];
    int koordy[10];
    
    std::cout << "vvedite kolichestvo tochek: ";
    std::cin >> n;
    std::cout << "\n\n";
    
    for (i=0; i<n; i++)
    {
        j=i+1;
        std::cout << "zadaite koordinatu x " << j << "-i tochki: ";
        std::cin >> koordx[i];
    }
    
    std::cout << "\n\n";
    
    for (i=0; i<n; i++)
    {
        j=i+1;
        std::cout << "zadaite koordinatu y " << j << "-i tochki: ";
        std::cin >> koordy[i];
    }
    
    sp = maxspacing (*koordx, *koordy, n, i, j, t1, t2);
    
    std::cout << "max rasstoyanie mezhdu tochkami s koordinatami:\n";
    std::cout << "(" << koordx[t1] << "; " << koordy[t1] << ") i (";
    std::cout << koordx[t2] << "; " << koordy[t2] << ")";
    
    system("pause");
}
Добавлено через 11 минут
Точки у тебя определяются в функции.
А вывод в main().Неизвестно что писать при выводе?
1
0 / 0 / 0
Регистрация: 21.10.2011
Сообщений: 5
21.01.2012, 08:12  [ТС]
MrCold, спасибо, теперь хотя бы стала запускаться

Но работает неправильно. Выводит всегда первые две точки.

Цитата Сообщение от MrCold Посмотреть сообщение
А вывод в main().Неизвестно что писать при выводе?
Не понял вопроса. t1-t2 же вроде.
0
873 / 771 / 173
Регистрация: 11.01.2012
Сообщений: 1,942
21.01.2012, 08:18
Могу ошибаться:

sp = maxspacing (*koordx, *koordy, n, i, j, t1, t2) этой строкой ты отправил точки t1, t2 в функцию,
а их назад еще нужно вернуть.
0
0 / 0 / 0
Регистрация: 21.10.2011
Сообщений: 5
21.01.2012, 08:32  [ТС]
Цитата Сообщение от MrCold Посмотреть сообщение
Могу ошибаться:

sp = maxspacing (*koordx, *koordy, n, i, j, t1, t2) этой строкой ты отправил точки t1, t2 в функцию,
а их назад еще нужно вернуть.
Ну да, и, по идее, через rT1 и rT2 им должны были присвоиться значения i1 и j1.
0
873 / 771 / 173
Регистрация: 11.01.2012
Сообщений: 1,942
21.01.2012, 08:40
Еще не пойму как сортируешь расстояния. Сколько точек , столько и
расстояний долж. быть.
0
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,871
21.01.2012, 08:55
Цитата Сообщение от MrCold Посмотреть сообщение
maxspacing (int x, int y,
как связано с
Цитата Сообщение от MrCold Посмотреть сообщение
d = ((x[&i1]-x[&j1])
и
Цитата Сообщение от you Посмотреть сообщение
(x[i1]-x[j1])
массив то откуда взялся???

Добавлено через 5 минут
MrCold,
расстояние узнается так
корень квадратный из x1-x2 в квадрате плюс y1-y2 в квадрате
теорема Пифагора однако

Цитата Сообщение от you Посмотреть сообщение
d=sqrt((x[i1]-x[j1])*(x[i1]-x[i1]) + (y[i1]-y[j1])*(y[i1]-y[j1]));
вот это правильно
но массивов то у вас у обоих нет
0
873 / 771 / 173
Регистрация: 11.01.2012
Сообщений: 1,942
21.01.2012, 08:57
........
Всего лишь хотел прогу запустить.
Спасиб что подключился.
0
 Аватар для Toshkarik
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
21.01.2012, 09:55
Предлагаю ввод сделать примерно таким:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
    int size = 0;
    int **a = 0;
 
    std::cout << "Enter the number of points: ";
    std::cin >> size;
 
    a = new int*[ size ];
 
    for ( int i = 0; i < size; i++ )
    a[ i ] = new int[ 2 ];
 
    std::cout << std::endl;
 
    for ( int i = 0; i < size; i++ ) {
    std::cout << "Enter the x coordinate of " << i + 1 << " point: ";
    std::cin >> a[ i ][ 0 ];
 
    std::cout << "Enter the y coordinate of " << i + 1 << " point: ";
    std::cin >> a[ i ][ 1 ];
    }
Сейчас попробую сделать алгоритм.

Добавлено через 36 минут
Вот, сделал, вроде работает.
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
#include <iostream>
#include <cmath>
 
 
int main( int argc, char *argv[] ) {
 
    int size = 0, c1 = 0, c2 = 1;
    double **a = 0;
 
    std::cout << "Enter the number of points: ";
    std::cin >> size;
 
    if ( size < 2 )
    return 1;
 
    a = new double*[ size ];
 
    for ( int i = 0; i < size; i++ )
    a[ i ] = new double[ 2 ];
 
    std::cout << std::endl;
 
    for ( int i = 0; i < size; i++ ) {
    std::cout << "Enter the x coordinate of " << i + 1 << " point: ";
    std::cin >> a[ i ][ 0 ];
 
    std::cout << "Enter the y coordinate of " << i + 1 << " point: ";
    std::cin >> a[ i ][ 1 ];
    }
 
    std::cout << std::endl;
 
    double d = std::abs( std::sqrt( std::pow(( a[ 0 ][ 0 ] - a[ 1 ][ 0 ] ), 2 ) + std::pow(( a[ 0 ][ 1 ] - a[ 1 ][ 1 ] ), 2 )));
 
    for ( int i = 0; i < size; i++ )
    for ( int j = i + 1; j < size; j++ ) {
        double temp = std::abs( std::sqrt( std::pow( a[ i ][ 0 ] - a[ j ][ 0 ], 2 ) + std::pow( a[ i ][ 1 ] - a[ j ][ 1 ], 2 )));
 
        if ( temp > d ) {
        d = temp;
        c1 = i + 1;
        c2 = j + 1;
        }
    }
 
    std::cout << "Maximum distance between point " << c1 << " and point " << c2 << ". ( d = " << d << " )" << std::endl;
 
    std::cout << std::endl;
    return 0;
}
0
873 / 771 / 173
Регистрация: 11.01.2012
Сообщений: 1,942
21.01.2012, 10:00
....Зачет.
0
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,871
21.01.2012, 19:28
you,
у тебя одна ошибка
а вы тут накрутили
Цитата Сообщение от you Посмотреть сообщение
float maxspacing (int x, int y, int n1, int i1, int j1, int &rT1, int &rT2)
вот тут надо сделать передачу не переменной а адреса массива
вот так
C++
1
float maxspacing (int * x, int * y, int n1, int i1, int j1, int &rT1, int &rT2)
и все заработает
далее переменные int i1, int j1 передавать не надо они локальные
C++
1
2
float maxspacing (int * x, int * y, int n1, int &rT1, int &rT2)
int i1, j1;
вот так будет лучше

Добавлено через 2 минуты
Цитата Сообщение от you Посмотреть сообщение
int koordx[n];
int koordy[n];
вот здесь ошибка размер массива не может быть переменным
задай хотя бы так
C++
1
2
int koordx[100];
 int koordy[100];
0
 Аватар для Toshkarik
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
21.01.2012, 19:30
Не одна, расстояния должны вычисляться как абсолютное значение.
0
1 / 1 / 0
Регистрация: 26.04.2014
Сообщений: 121
05.05.2014, 08:26
можно на паскале?
0
Почетный модератор
 Аватар для Памирыч
23251 / 9163 / 1084
Регистрация: 11.04.2010
Сообщений: 11,014
05.05.2014, 11:01
Цитата Сообщение от ZaRinKa97 Посмотреть сообщение
можно на паскале?
Здесь - нет. Создайте тему тут и ждите ответа
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
05.05.2014, 11:01
Помогаю со студенческими работами здесь

Найти расстояние между двумя точками на плоскости
Даны четыре действительных числа: x1, y1, x2, y2. Напишите функцию distance(x1, y1, x2, y2), вычисляющую расстояние между точкой (x1. y1) и...

Найти максимальное расстояние между точками на плоскости
Даны координаты n точек на плоскости: (X1, Y1), ..., (Xn, Yn) (n ≤ 30). Найти номер пары точек, расстояние между которыми самое большое...

Найти минимальное расстояние между двумя точками
Даны два массива вещественных чисел, x и y. Их длина одинакова и равна n. Каждый (i-й) элемент массива x содержит абсциссу некоторой точки...

найти наименьшее расстояние между двумя точками
Проблема в функции short_distance ,она должна перебирать массив с координатами точек и найти наименьшее расстояние между двумя точками из...

найти максимальное расстояние между двумя точками на плоскости
Нужно найти максимальное расстояние между двумя точка,заданными на плоскости #include &lt;iostream&gt; #include&lt;math.h&gt; ...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Функция установки текстового статуса в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru