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