Нахождение минимального расстояния между двумя точками - C (СИ)
Формулировка задачи:
ЗАДАЧА: Даны два множества A и B, состоящие из N1 и N2 (вводятся с клавиатуры) точек соответственно (точки заданы своими координатами на плоскости). Написать функцию для нахождения минимального расстояния между двумя точками этих множеств и сами точки, расположенные на этом расстоянии.
вот, что у меня получилось, при запуске ввожу точки первого массива и затем второго, но после этого программа перестает работать..
Подскажите, пожалуйста. Уже не соображаю, что тут менять.
#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;
}
ошибка, как я понимаю, в функции rasst, только что там не так?
Решение задачи: «Нахождение минимального расстояния между двумя точками»
textual
Листинг программы
point_t * arr = new point_t[num_points]; //... delete [] arr;
Объяснение кода листинга программы
- Создается массив типа point_t с размером num_points (
arr). - В цикле строятся точки
xиy(возможно, это координаты точек на графике). - Вычисляется расстояние между двумя точками (например, по формуле Евклида) и сохраняется в переменной min_distance.
- После использования, массив
arrосвобождается с помощью оператора delete [].