0 / 0 / 0
Регистрация: 13.04.2012
Сообщений: 21
1

Нахождение минимального расстояния между двумя точками

18.10.2012, 15:03. Показов 1070. Ответов 6
Метки нет (Все метки)

ЗАДАЧА: Даны два множества A и B, состоящие из N1 и N2 (вводятся с клавиатуры) точек соответственно (точки заданы своими координатами на плоскости). Написать функцию для нахождения минимального расстояния между двумя точками этих множеств и сами точки, расположенные на этом расстоянии.
вот, что у меня получилось, при запуске ввожу точки первого массива и затем второго, но после этого программа перестает работать..
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
#include <iostream>
#include <Math.h>
using namespace std;
 
double d(double x,double y){
    double t;
    double kx=pow(x,2);
    double ky=pow(y,2);
    t=pow(kx+ky,0.5);
    return t;
}
 
double rasst(double **mass1, double **mass2, int razmer1, int razmer2){
    double kx=mass1[0][0]-mass2[0][0];
    double ky=mass2[0][1]-mass2[0][1];
    double distance=d(kx,ky);
    double s;
    for(int i=0; i<razmer1; i++){
        for(int j=0; j<razmer2; j++){
               double kx=mass1[i][0]-mass2[j][0];
               double ky=mass2[i][1]-mass2[j][1];
               s=d(kx,ky);
               if(s<distance){
                   distance=s;
               }
        }
    }
    return distance;
}
 
int main(){
    setlocale(LC_ALL,"");
    int razmer1; 
    cout << "Введите размер первого массива " ;
    cin>>razmer1;
    double **mass1= new double*[razmer1];
    for (int i = 0; i < razmer1; i++) {
        mass1[i] = new double[2];
    }
    for (int i = 0; i < razmer1; i++) {
        cout<<"введите координаты "<<i+1<<" точки:\n";
        cout << " x = ";
        cin>>mass1[i][0];
        cout << " y = ";
        cin>>mass1[i][1];
    }
 
    int razmer2; 
    cout << "Введите размер второго массива " ;
    cin>>razmer2;
    double **mass2= new double*[razmer2];
    for (int i = 0; i < razmer2; i++) {
        mass2[i] = new double[2];
    }
    for (int i = 0; i < razmer2; i++) {
        cout<<"введите координаты "<<i+1<<" точки:\n";
        cout << " x = ";
        cin>>mass2[i][0];
        cout << " y = ";
        cin>>mass2[i][1];
    }
    double r=rasst(mass1, mass2, razmer1, razmer2);
    cout<<"наименьшее расстояние между точками равно:"<<r<<endl;
    //cout<<"это точки:"<<"("<<..<<","<<..<<") и ("<<..<<","<<..<<");"<<endl;
 
 
for (int i = 0; i<razmer1; i++){
     delete[]mass1[i];
}
for (int i = 0; i<razmer2; i++){
     delete[]mass2[i];
}
delete [] mass1;
delete [] mass2;
return 0;
}
Подскажите, пожалуйста. Уже не соображаю, что тут менять.

Добавлено через 10 минут
ошибка, как я понимаю, в функции rasst, только что там не так?
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.10.2012, 15:03
Ответы с готовыми решениями:

Функция вычисления расстояния между двумя точками
Написать функцию вычисления евклидового расстояния между двумя точками на плоскости.

Вычисление расстояния между двумя точками с заданными координатами
задача вычеслить расстояние между двумя точка с данными координатами ввожу все числа в клавы....

Вычислить площадь треугольника с использованием функции нахождения расстояния между двумя точками
Треугольник задан своими координатами своих вершин. Вычислить площадь треугольника с использованием...

Вычислить расстояние между двумя точками
вычислить расстояние между двумя точками с координатами (х1,х2) и (у1,у2). Координаты вводятся с...

6
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
11655 / 7167 / 1702
Регистрация: 25.07.2009
Сообщений: 13,132
18.10.2012, 15:43 2
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Tajoda, прежде всего с языком программирования определитесь - в С нет операторов new/delete. Дальше я бы определил структуру, представляющую точку, например так:
C
1
2
3
4
typedef struct POINT {
    double x;
    double y;
} point_t;
и функцию, вычисляющую расстояние между двумя точками
C
1
2
3
4
5
6
7
#include <math.h>
double distance(const point_t * p1, const point_t * p2) {
    double dx = p2->x - p1->x;
    double dy = p2->y - p1->y;
 
    return sqrt(dx * dx + dy * dy);
}
А дальше в цикле для каждой точки первого массива искать расстояние до каждой точки второго массива и возвращать указатели на те из них, чьё расстояние окажется минимальным...
1
0 / 0 / 0
Регистрация: 13.04.2012
Сообщений: 21
18.10.2012, 17:30  [ТС] 3
там я делаю динамический массив, его же удалять вроде нужно..

Добавлено через 50 минут
а как мне вводить размер каждого массива?
так не выходит:
C
1
2
3
4
5
6
7
8
9
10
11
12
void main(){
    setlocale(LC_ALL,"");
    int razmer1; 
    cout << "Введите размер первого массива " ;
    cin>>razmer1;
    point_t *mass1[razmer1];
 
    int razmer2; 
    cout << "Введите размер второго массива " ;
    cin>>razmer2;
    point_t *mass2[razmer2];
}
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
11655 / 7167 / 1702
Регистрация: 25.07.2009
Сообщений: 13,132
18.10.2012, 18:32 4
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Цитата Сообщение от Tajoda Посмотреть сообщение
а как мне вводить размер каждого массива?
C++
1
2
3
point_t * arr = new point_t[num_points];
//...
delete [] arr;
C
1
2
3
4
point_t * arr = malloc(sizeof(point_t) * num_points);
if ( ! arr ) { /*memory error */ }
/*...*/
free(arr);
И всё-таки с языком определитесь. Если Вам на С++ надо - скажите, перенесу в соответствующий раздел.
0
0 / 0 / 0
Регистрация: 13.04.2012
Сообщений: 21
20.10.2012, 17:23  [ТС] 5
нет, это СИ. спасибо, с прогой разобрался, немножко по другому сделал.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
double poisk(double x1,double y1,double x2,double y2){
    return sqrt(pow((x2-x1),2)+pow((y2-y1),2));
} 
\\\\\
void main(){
    setlocale(LC_ALL,"RUS");
    struct mnozhestvo{ 
        double x;
        double y;
    };
\\\\\
mnozhestvo *A = new mnozhestvo[razm1];
mnozhestvo *B = new mnozhestvo[razm2];
\\\\\
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
11655 / 7167 / 1702
Регистрация: 25.07.2009
Сообщений: 13,132
21.10.2012, 04:04 6
Tajoda, нет в С ни new ни delete, как С программа это просто не скомпилируется.
0
0 / 0 / 0
Регистрация: 13.04.2012
Сообщений: 21
21.10.2012, 16:47  [ТС] 7
я не знал этого. Пока С++ не изучаем, работаем на С.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.10.2012, 16:47
Помогаю со студенческими работами здесь

Найти расстояние между двумя точками на плоскости
#include &lt;stdio.h&gt; #include &lt;conio.h&gt; #include &lt;stdlib.h&gt; #math.h main() { int...

Определить разницу между двумя временными точками
Разработать программу согласно варианту задания. Максимальная длина строк не менее 80 символов....

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

Рассчитать расстояние между двумя точками в трехмерном пространстве
Здравствуйте, существует проблема с вводом чисел. Вот задание: &quot;Рассчитать расстояние между двумя...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru