Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
0 / 0 / 0
Регистрация: 13.04.2012
Сообщений: 21
1

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

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

Author24 — интернет-сервис помощи студентам
ЗАДАЧА: Даны два множества 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
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
18.10.2012, 15:03
Ответы с готовыми решениями:

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

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

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

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

6
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12832 / 7569 / 1764
Регистрация: 25.07.2009
Сообщений: 13,965
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Эксперт С++
12832 / 7569 / 1764
Регистрация: 25.07.2009
Сообщений: 13,965
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Эксперт С++
12832 / 7569 / 1764
Регистрация: 25.07.2009
Сообщений: 13,965
21.10.2012, 04:04 6
Tajoda, нет в С ни new ни delete, как С программа это просто не скомпилируется.
0
0 / 0 / 0
Регистрация: 13.04.2012
Сообщений: 21
21.10.2012, 16:47  [ТС] 7
я не знал этого. Пока С++ не изучаем, работаем на С.
0
21.10.2012, 16:47
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
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
Ответ Создать тему
Новые блоги и статьи
Что такое хорошо и что такое плохо, вид сбоку. Индивид и общество - грань не нарушения.
Hrethgir 18.01.2025
В моей личной жизни и времени, я рассуждаю категорией "хуже-лучше", в том плане, когда меня спросили например - "а зачем ты делаешь свой процессор?", то я ответил - "чтобы сделать свою жизнь лучше". . .
Передача по ссылке или по значению в Java?
InfoMaster 18.01.2025
В мире программирования на Java одним из ключевых аспектов, требующих глубокого понимания, является механизм передачи параметров в методы. Этот фундаментальный концепт часто становится источником. . .
Тернарный условный оператор в Python
InfoMaster 18.01.2025
В мире программирования существует множество инструментов и конструкций, позволяющих создавать эффективный и лаконичный код. Одним из таких инструментов является тернарный условный оператор, который. . .
Как удалить неотслеживаемые файлы из рабочего дерева Git
InfoMaster 18.01.2025
В процессе разработки программного обеспечения с использованием системы контроля версий Git часто возникает необходимость в управлении неотслеживаемыми файлами. Неотслеживаемые файлы (untracked. . .
Что делает код if __name__ == "__main__": в Python
InfoMaster 18.01.2025
В мире программирования на Python существует множество важных концепций, и одной из наиболее интересных является конструкция if __name__ == "__main__". Эта специальная конструкция играет ключевую. . .
Как заставить Git забыть об отслеживаемом файле, добавленном в .gitignore
InfoMaster 18.01.2025
В мире разработки программного обеспечения система контроля версий Git стала неотъемлемой частью рабочего процесса, позволяя эффективно отслеживать изменения в коде и управлять ими. Однако. . .
Что означает use strict в JavaScript и для чего используется
InfoMaster 18.01.2025
В мире современной веб-разработки JavaScript играет ключевую роль как один из основных языков программирования. По мере его эволюции возникла необходимость в механизмах, которые помогли бы. . .
Как работать со скрытыми (hidden) элементами в jQuery
InfoMaster 18.01.2025
В современной веб-разработке управление видимостью элементов на странице является одним из ключевых аспектов создания интерактивных пользовательских интерфейсов. jQuery предоставляет мощный набор. . .
Как переключаться между ветками (Branch) с помощью checkout в Git
InfoMaster 18.01.2025
Ветки в Git являются одной из ключевых концепций для управления версионностью кода, позволяя разработчикам эффективно работать в команде и параллельно развивать программные проекты. Каждый новый. . .
Что такое стек и куча, чем они отличаются и где находятся
InfoMaster 18.01.2025
Понимание основных концепций памяти в программировании В мире современного программирования эффективное управление памятью играет ключевую роль в создании производительных и надежных приложений. . . .
Как использовать комментарии в JSON
InfoMaster 18.01.2025
JSON (JavaScript Object Notation) представляет собой легкий и широко используемый формат обмена данными, который стал стандартом де-факто для веб-приложений и программных интерфейсов. При работе с. . .
Как заставить git pull перезаписать локальные файлы в Git
InfoMaster 18.01.2025
Проблема перезаписи локальных файлов в Git При работе с системой контроля версий Git разработчики часто сталкиваются с ситуацией, когда необходимо синхронизировать локальный репозиторий с. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru