Реализавать функцию поиска двух точек в массиве наиболее удаленных друг от друга - 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");
}

Объяснение кода листинга программы

  1. Ввод размера массива точек
  2. Выделение памяти под массив точек
  3. Ввод координат точек в массив
  4. Вывод координат точек на экран
  5. Поиск двух точек в массиве с наибольшим расстоянием между ними
  6. Вывод результата на экран (наибольшее расстояние и координаты точек)
  7. Освобождение памяти, выделенной под массив точек

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 3.875 из 5
Похожие ответы