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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.80
you
0 / 0 / 0
Регистрация: 21.10.2011
Сообщений: 5
#1

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

21.01.2012, 06:47. Просмотров 1963. Ответов 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&)'


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

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


Помогите, пожалуйста.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.01.2012, 06:47     Найти наибольшее расстояние между точками
Посмотрите здесь:

Вычислить расстояние между двумя точками с координатами х1, у1 и х2, у2. C++
Расстояние между 2-мя точками. C++
Расстояние между точками C++
Определить наименьшее расстояние между тремя точками C++
C++ Посчитать расстояние между точками прямой
C++ Найти наибольшее расстояние между точками
C++ Найти номера пары точек, расстояние между которыми наибольшее (считать, что такая пара единственная).
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MrCold
852 / 750 / 71
Регистрация: 11.01.2012
Сообщений: 1,942
21.01.2012, 07:47     Найти наибольшее расстояние между точками #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
#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().Неизвестно что писать при выводе?
you
0 / 0 / 0
Регистрация: 21.10.2011
Сообщений: 5
21.01.2012, 08:12  [ТС]     Найти наибольшее расстояние между точками #3
MrCold, спасибо, теперь хотя бы стала запускаться

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

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

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

sp = maxspacing (*koordx, *koordy, n, i, j, t1, t2) этой строкой ты отправил точки t1, t2 в функцию,
а их назад еще нужно вернуть.
Ну да, и, по идее, через rT1 и rT2 им должны были присвоиться значения i1 и j1.
MrCold
852 / 750 / 71
Регистрация: 11.01.2012
Сообщений: 1,942
21.01.2012, 08:40     Найти наибольшее расстояние между точками #6
Еще не пойму как сортируешь расстояния. Сколько точек , столько и
расстояний долж. быть.
ValeryS
Модератор
6511 / 4977 / 460
Регистрация: 14.02.2011
Сообщений: 16,484
21.01.2012, 08:55     Найти наибольшее расстояние между точками #7
Цитата Сообщение от 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]));
вот это правильно
но массивов то у вас у обоих нет
MrCold
852 / 750 / 71
Регистрация: 11.01.2012
Сообщений: 1,942
21.01.2012, 08:57     Найти наибольшее расстояние между точками #8
........
Всего лишь хотел прогу запустить.
Спасиб что подключился.
Toshkarik
1139 / 856 / 51
Регистрация: 03.08.2011
Сообщений: 2,384
Завершенные тесты: 1
21.01.2012, 09:55     Найти наибольшее расстояние между точками #9
Предлагаю ввод сделать примерно таким:
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;
}
MrCold
852 / 750 / 71
Регистрация: 11.01.2012
Сообщений: 1,942
21.01.2012, 10:00     Найти наибольшее расстояние между точками #10
....Зачет.
ValeryS
Модератор
6511 / 4977 / 460
Регистрация: 14.02.2011
Сообщений: 16,484
21.01.2012, 19:28     Найти наибольшее расстояние между точками #11
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];
Toshkarik
1139 / 856 / 51
Регистрация: 03.08.2011
Сообщений: 2,384
Завершенные тесты: 1
21.01.2012, 19:30     Найти наибольшее расстояние между точками #12
Не одна, расстояния должны вычисляться как абсолютное значение.
ZaRinKa97
1 / 1 / 0
Регистрация: 26.04.2014
Сообщений: 121
05.05.2014, 08:26     Найти наибольшее расстояние между точками #13
можно на паскале?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.05.2014, 11:01     Найти наибольшее расстояние между точками
Еще ссылки по теме:

Расстояние между точками x0 y0 x1 y1 C++
C++ Найти максимальное расстояние между точками на плоскости
Найти номера двух точек, расстояние между которыми наибольшее C++
C++ Файл: найти наибольшее и наименьшее расстояния между точками.
Найти минимальное расстояние между двумя точками C++

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

Или воспользуйтесь поиском по форуму:
Памирыч
Почетный модератор
20558 / 8610 / 1028
Регистрация: 11.04.2010
Сообщений: 11,009
05.05.2014, 11:01     Найти наибольшее расстояние между точками #14
Цитата Сообщение от ZaRinKa97 Посмотреть сообщение
можно на паскале?
Здесь - нет. Создайте тему тут и ждите ответа
Yandex
Объявления
05.05.2014, 11:01     Найти наибольшее расстояние между точками
Ответ Создать тему
Опции темы

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