Реализавать функцию поиска двух точек в массиве наиболее удаленных друг от друга - C (СИ)
Формулировка задачи:
Реализавать функцию поиска двух точек в массиве наиболее удаленных друг от друга. Точки задаются координатами х и у в виде структуры. Массив и его размер передаются в качестве параметров функции. Функция возвращает позиции найденных точек в массиве и расстояние между ними. Используя разработанную функцию осуществить поиск в N массивах, введенных пользавателем. На языке С
Решение задачи: «Реализавать функцию поиска двух точек в массиве наиболее удаленных друг от друга»
textual
Листинг программы
##include <stdlib.h>
#include <stdio.h>
#include <math.h>
typedef struct {
float x;
float y;
//float z;
} point;
typedef struct {
point p1, p2;
float d; // расстояние
} res;
res calc(point *mas, int size);
void vvod(point *mas, int size);
void vyvod(point *mas, int size);
int main()
{
int size = 0;
point *arr;
res r;
////
printf("Введите число точек в массиве");
scanf("%d", &size);
arr = (point*) malloc(size * sizeof(point));
vvod(arr, size);
vyvod(arr, size);
r = calc(arr, size);
printf("Максимальное расстояние между точками с координатами \n");
printf("(%f, %f) и (%f, %f) равно %f", r.p1.x, r.p1.y, r.p2.x, r.p2.y, r.d);
free(arr);
return 0;
}
res calc(point *mas, int size) {
res r = { { 0, 0 }, { 0, 0 }, 0 };
int i = 0, k = 0;
float d = 0;
for (i = 0; i < size - 1; ++i)
for (k = i + 1; k < size; ++k) {
d = sqrt(pow(mas[k].x - mas[i].x, 2) + pow(mas[k].y - mas[i].y, 2));
//printf("\n d = %f", d);
if (d > r.d) {
r.d = d;
r.p1.x = mas[i].x;
r.p1.y = mas[i].y;
r.p2.x = mas[k].x;
r.p2.y = mas[k].y;
}
}
return r;
}
void vvod(point *mas, int size) {
int i = 0;
printf("Вводим массив точек");
for (i = 0; i < size; ++i) {
printf("т. %d: x, y? ", i);
scanf("%f %f", &mas[i].x, &mas[i].y);
}
}
void vyvod(point *mas, int size) {
int i = 0;
printf("\nИсходный массив");
for (i = 0; i < size; ++i)
printf("(%3.4f, %3.4f); ", mas[i].x, mas[i].y);
printf("\n");
}
Объяснение кода листинга программы
- Ввод размера массива точек
- Выделение памяти под массив точек
- Ввод координат точек в массив
- Вывод координат точек на экран
- Поиск двух точек в массиве с наибольшим расстоянием между ними
- Вывод результата на экран (наибольшее расстояние и координаты точек)
- Освобождение памяти, выделенной под массив точек