Отсортировать точки по во возрастанию расстояния - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Здравствуйте, написал программу для вывода минимально точки, а вот как сделать чтобы она их выводила по возрастанию я не знаю, помогите пожалуйста переделать. Задача:Дано множество точек на плоскости. Отсортировать точки по во возрастанию расстояния.
#include <stdio.h>
#include <math.h>
 
struct tp
{
int x, y, d;
};
 
float func(tp& p )
{
float x = p.x;
float y= p.y;
return sqrt((x*x)+(y*y));
}
int main(void)
{
int n = 0, i;
int nmin=0;
float min;
tp p[100];
while(n < 1 || n > 100)
{
scanf ("%d", &n);}
for(i=0; i<n; i++)
{
scanf("%d %d", &p[i].x, &p[i].y);
}
for(i=0; i<n; i++)
 
p[i].d = func(p[i]);
min = p[0].d;
for( i = 0; i<n; i++)
if(min > p[i].d)
{
min = p[i].d;
nmin = i;
}
printf ("%d %d ", p[nmin].x, p[nmin].y);
}

Решение задачи: «Отсортировать точки по во возрастанию расстояния»

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
struct point
{
    double x, y;
};
    
int cmp(const void* b, const void* a)
{
    struct point* pa = (struct point*) a;
    struct point* pb = (struct point*) b;
 
    return ((pa->x * pa->x + pa->y * pa->y) -
        (pb->x * pb->x + pb->y * pb->y));
}
 
void display_points(const struct point* points, size_t count)
{
    size_t i;
    for(i = 0; i < count; ++i)
    printf("{%8.2f, %8.2f}\n", points[i].x, points[i].y);
}
 
#define SIZE 10
 
void fill_points(struct point* points, size_t count, double thrashold)
{
    size_t i;
    for(i = 0; i < count; ++i)
    {
    points[i].x = (((double) rand()) / RAND_MAX - .5) * 2 * thrashold;
    points[i].y = (((double) rand()) / RAND_MAX - .5) * 2 * thrashold;
    }
}
 
int main(void)
{
    struct point points[SIZE];
 
    srand((size_t) time(NULL));
    
    fill_points(points, SIZE, 50);
    
    printf("Generated array of points:\n");
    display_points(points, SIZE);
 
    qsort(points, SIZE, sizeof(struct point), cmp);
    
    printf("Points ordered ascending by the length of radius vector:\n");
    display_points(points, SIZE);
    
    exit(0);
}

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

В этом коде используется язык программирования C для решения задачи по сортировке массива структур точек по возрастанию длины радиуса вектора. Список действий, которые выполняются в коде:

  1. Включаются необходимые заголовочные файлы:
    • stdio.h - для работы с вводом/выводом данных;
    • stdlib.h - для работы с функциями сортировки и выделения памяти;
    • time.h - для получения текущего времени, которое используется в качестве семени для генератора случайных чисел.
  2. Определяется структура точки:
    • Название структуры: point;
    • Поля структуры: x и y типа double, которые представляют координаты точки в двумерном пространстве.
  3. Реализуется функция сравнения:
    • Название функции: cmp;
    • Эта функция сравнивает две структуры point по длине их радиуса вектора, используя формулу sqrt(x^2 + y^2).
  4. Реализуется функция вывода точек:
    • Название функции: display_points;
    • Эта функция выводит на экран все точки из переданного массива, каждая точка выводится в отдельной строке с использованием формата printf и шаблонных символов %8.2f для координат x и y.
  5. Задаются константы и переменные:
    • SIZE - размер массива точек;
    • thrashold - параметр, который используется для генерации случайных значений координат точек.
  6. Заполняется массив точек случайными значениями:
    • Название функции: fill_points;
    • Эта функция заполняет массив points случайными значениями координат x и y с помощью функции rand() и srand().
  7. Выполняется основная функция программы:
    • Название функции: main;
    • В этой функции выполняются следующие действия:
      • Массив points заполняется случайными значениями с помощью функции fill_points;
      • Выводится на экран сгенерированный массив точек с помощью функции display_points;
      • Массив points сортируется по возрастанию длины радиуса вектора с помощью функции qsort и передается функция сравнения cmp;
      • Выводится на экран отсортированный массив точек с помощью функции display_points;
      • Программа завершается с помощью exit(0). В итоге, этот код генерирует массив случайных точек в двумерном пространстве, выводит его на экран, сортирует точки по возрастанию длины радиуса вектора и также выводит отсортированный массив на экран.

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


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

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

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