Отсортировать точки в порядке удаления их от центра тяжести - C (СИ)
Формулировка задачи:
Помогите пожалуйста с решением такой задачи:
В трехмерном пространстве задано множество материальных точек. Отсортировать эти точки в порядке удаления их от центра тяжести этого множества.
Спасибо.
Решение задачи: «Отсортировать точки в порядке удаления их от центра тяжести»
textual
Листинг программы
#include<stdio.h>
int main()
{
int i,n;
float sx=0,sy=0,sz=0,sm=0,dist[5];
//Структура содержит координаты точек и массу
typedef struct tochka{
float x,y,z,massa;
};
struct tochka cent, toc[5]={
{4,5,6,12},
{7,8,9,23},
{11,12,13,21},
{14,15,16,32},
{17,18,19,5}};
//Вычисление центра тяжести точек
for(i=0;i<5;i++)
{
sx += toc[i].x*toc[i].massa;
sy += toc[i].y * toc[i].massa;
sz += toc[i].z * toc[i].massa;
sm += toc[i].massa;
}
cent.x = sx/sm;
cent.y = sy/sm;
cent.z = sz/sm;
//Определение массива квадратов расстояний от центра для каждой точки
for(i=0;i<5;i++)
dist[i]=(toc[i].x - cent.x)*(toc[i].x - cent.x) +
(toc[i].y - cent.y)*(toc[i].y - cent.y) +
(toc[i].z - cent.z)*(toc[i].z - cent.z);
//Сортировка полученного массива по возрастанию
do
{n=0;
for(i=0;i<4;i++)
if(dist[i]>dist[i+1])
{
sm=dist[i];
dist[i]=dist[i+1];
dist[i+1]=sm;
n++;
}
}while(n!=0);
for(i=0;i<5;i++)
printf("\n%f",dist[i]);
return 0;
}
Объяснение кода листинга программы
- Включаем заголовочный файл stdio.h для использования функций ввода-вывода
- Объявляем переменные:
- i, n - счетчики
- sx, sy, sz, sm - суммы координат и массы точек
- dist[5] - массив для хранения квадратов расстояний
- struct tochka - объявление структуры, содержащей координаты точек и их массу
- cent - переменная для хранения центра тяжести
- toc[5] - массив структур tochka, содержащих координаты и массу точек
- Вычисляем центр тяжести, проходя по всем точкам и суммируя их координаты и массу
- Вычисляем квадраты расстояний от центра тяжести до каждой точки, сохраняем их в массиве dist
- Сортируем массив dist по возрастанию, используя алгоритм сортировки пузырьком
- Выводим отсортированные значения на экран
- Возвращаем 0, чтобы указать, что программа успешно завершилась