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

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

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

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

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

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

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

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

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

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

Файл: найти наибольшее и наименьшее расстояния между точками. - C++
Помогите разобраться Пытаюсь сделать задание: В текстовый файл занесены пары чисел, разделенных пробелом (каждая пара чисел – в новой...

13
MrCold
855 / 753 / 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().Неизвестно что писать при выводе?
1
you
0 / 0 / 0
Регистрация: 21.10.2011
Сообщений: 5
21.01.2012, 08:12  [ТС] #3
MrCold, спасибо, теперь хотя бы стала запускаться

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

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

sp = maxspacing (*koordx, *koordy, n, i, j, t1, t2) этой строкой ты отправил точки t1, t2 в функцию,
а их назад еще нужно вернуть.
0
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.
0
MrCold
855 / 753 / 71
Регистрация: 11.01.2012
Сообщений: 1,942
21.01.2012, 08:40 #6
Еще не пойму как сортируешь расстояния. Сколько точек , столько и
расстояний долж. быть.
0
ValeryS
Модератор
6709 / 5118 / 482
Регистрация: 14.02.2011
Сообщений: 17,213
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]));
вот это правильно
но массивов то у вас у обоих нет
0
MrCold
855 / 753 / 71
Регистрация: 11.01.2012
Сообщений: 1,942
21.01.2012, 08:57 #8
........
Всего лишь хотел прогу запустить.
Спасиб что подключился.
0
Toshkarik
1143 / 860 / 51
Регистрация: 03.08.2011
Сообщений: 2,390
Завершенные тесты: 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;
}
0
MrCold
855 / 753 / 71
Регистрация: 11.01.2012
Сообщений: 1,942
21.01.2012, 10:00 #10
....Зачет.
0
ValeryS
Модератор
6709 / 5118 / 482
Регистрация: 14.02.2011
Сообщений: 17,213
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];
0
Toshkarik
1143 / 860 / 51
Регистрация: 03.08.2011
Сообщений: 2,390
Завершенные тесты: 1
21.01.2012, 19:30 #12
Не одна, расстояния должны вычисляться как абсолютное значение.
0
ZaRinKa97
1 / 1 / 0
Регистрация: 26.04.2014
Сообщений: 121
05.05.2014, 08:26 #13
можно на паскале?
0
Памирыч
Почетный модератор
20611 / 8651 / 1029
Регистрация: 11.04.2010
Сообщений: 11,008
05.05.2014, 11:01 #14
Цитата Сообщение от ZaRinKa97 Посмотреть сообщение
можно на паскале?
Здесь - нет. Создайте тему тут и ждите ответа
0
05.05.2014, 11:01
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.05.2014, 11:01
Привет! Вот еще темы с ответами:

Найти номера двух точек, расстояние между которыми наибольшее - C++
Надеюсь сможет кто-нибудь помочь, буду премного благодарен :) 1. Даны координаты точек на плоскости: x1, y1,...,xn,yn. Найти номера двух...

Расстояние между точками - C++
задание: дано n точек определить номера точек которые имеют максимальное и минимальное расстояние между точками. Когда вводил n=3 и...

Расстояние между точками x0 y0 x1 y1 - C++
Всем привет, не могу понять в чем проблема программы: Найти расстояние между двумя точками заданными координатами(x1,y1) &amp;&amp; (x2,y2) ...

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


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

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

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